/*************************************************************/

#include <stddef.h>
#ifndef GL_VERSION_2_0
/* GL type for program/shader text */
typedef char GLchar;
#endif

#ifndef GL_VERSION_1_5
/* GL types for handling large vertex buffer objects */
typedef ptrdiff_t GLintptr;
typedef ptrdiff_t GLsizeiptr;
#endif

#ifndef GL_ARB_vertex_buffer_object
/* GL types for handling large vertex buffer objects */
typedef ptrdiff_t GLintptrARB;
typedef ptrdiff_t GLsizeiptrARB;
#endif

#ifndef GL_ARB_shader_objects
/* GL types for program/shader text and shader object handles */
typedef char GLcharARB;
typedef unsigned int GLhandleARB;
#endif

/* GL type for "half" precision (s10e5) float data in host memory */
#ifndef GL_ARB_half_float_pixel
typedef unsigned short GLhalfARB;
#endif

#ifndef GL_NV_half_float
typedef unsigned short GLhalfNV;
#endif

#ifndef GLEXT_64_TYPES_DEFINED
/* This code block is duplicated in glxext.h, so must be protected */
#define GLEXT_64_TYPES_DEFINED
/* Define int32_t, int64_t, and uint64_t types for UST/MSC */
/* (as used in the GL_EXT_timer_query extension). */
#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
#include <inttypes.h>
#elif defined(__sun__) || defined(__digital__)
#include <inttypes.h>
#if defined(__STDC__)
#if defined(__arch64__) || defined(_LP64)
typedef long int int64_t;
typedef unsigned long int uint64_t;
#else
typedef long long int int64_t;
typedef unsigned long long int uint64_t;
#endif /* __arch64__ */
#endif /* __STDC__ */
#elif defined( __VMS ) || defined(__sgi)
#include <inttypes.h>
#elif defined(__SCO__) || defined(__USLC__)
#include <stdint.h>
#elif defined(__UNIXOS2__) || defined(__SOL64__)
typedef long int int32_t;
typedef long long int int64_t;
typedef unsigned long long int uint64_t;
#elif defined(_WIN32) && defined(__GNUC__)
#include <stdint.h>
#elif defined(_WIN32)
typedef __int32 int32_t;
typedef __int64 int64_t;
typedef unsigned __int64 uint64_t;
#else
/* Fallback if nothing above works */
#include <inttypes.h>
#endif
#endif

#ifndef GL_EXT_timer_query
typedef int64_t GLint64EXT;
typedef uint64_t GLuint64EXT;
#endif

#ifndef GL_ARB_sync
typedef int64_t GLint64;
typedef uint64_t GLuint64;
typedef struct __GLsync *GLsync;
#endif

#ifndef GL_ARB_cl_event
/* These incomplete types let us declare types compatible with OpenCL's cl_context and cl_event */
struct _cl_context;
struct _cl_event;
#endif

#ifndef GL_ARB_debug_output
typedef void (APIENTRY *GLDEBUGPROCARB)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,GLvoid *userParam);
#endif

#ifndef GL_AMD_debug_output
typedef void (APIENTRY *GLDEBUGPROCAMD)(GLuint id,GLenum category,GLenum severity,GLsizei length,const GLchar *message,GLvoid *userParam);
#endif

#ifndef GL_NV_vdpau_interop
typedef GLintptr GLvdpauSurfaceNV;
#endif

#define NAME_EMPTY(x)
#define FUNC_EMPTY(x, y, z, w, t)
#define END_EMPTY()
#define CONST_EMPTY(x, y, z)

#ifndef GL_3DFX_multisample
#define GL_3DFX_multisample 1
#define EXTENSION_GL_3DFX_multisample(NAME, FUNC, CONST, END) \
	NAME(GL_3DFX_multisample) \
	CONST(int, GL_MULTISAMPLE_3DFX, 0x86B2) \
	CONST(int, GL_SAMPLE_BUFFERS_3DFX, 0x86B3) \
	CONST(int, GL_SAMPLES_3DFX, 0x86B4) \
	CONST(int, GL_MULTISAMPLE_BIT_3DFX, 0x20000000) \
	END()
#else
#define EXTENSION_GL_3DFX_multisample(NAME, FUNC, CONST, END)
#endif

#ifndef GL_3DFX_tbuffer
#define GL_3DFX_tbuffer 1
#define EXTENSION_GL_3DFX_tbuffer(NAME, FUNC, CONST, END) \
	NAME(GL_3DFX_tbuffer) \
	FUNC(void , glTbufferMask3DFX, GLTBUFFERMASK3DFX, (GLuint mask ), (mask)) \
	END()
#else
#define EXTENSION_GL_3DFX_tbuffer(NAME, FUNC, CONST, END)
#endif

#ifndef GL_3DFX_texture_compression_FXT1
#define GL_3DFX_texture_compression_FXT1 1
#define EXTENSION_GL_3DFX_texture_compression_FXT1(NAME, FUNC, CONST, END) \
	NAME(GL_3DFX_texture_compression_FXT1) \
	CONST(int, GL_COMPRESSED_RGB_FXT1_3DFX, 0x86B0) \
	CONST(int, GL_COMPRESSED_RGBA_FXT1_3DFX, 0x86B1) \
	END()
#else
#define EXTENSION_GL_3DFX_texture_compression_FXT1(NAME, FUNC, CONST, END)
#endif

#ifndef GL_AMD_conservative_depth
#define GL_AMD_conservative_depth 1
#define EXTENSION_GL_AMD_conservative_depth(NAME, FUNC, CONST, END) \
	NAME(GL_AMD_conservative_depth) \
	END()
#else
#define EXTENSION_GL_AMD_conservative_depth(NAME, FUNC, CONST, END)
#endif

#ifndef GL_AMD_debug_output
#define GL_AMD_debug_output 1
#define EXTENSION_GL_AMD_debug_output(NAME, FUNC, CONST, END) \
	NAME(GL_AMD_debug_output) \
	CONST(int, GL_MAX_DEBUG_LOGGED_MESSAGES_AMD, 0x9144) \
	CONST(int, GL_DEBUG_LOGGED_MESSAGES_AMD, 0x9145) \
	CONST(int, GL_DEBUG_SEVERITY_HIGH_AMD, 0x9146) \
	CONST(int, GL_DEBUG_SEVERITY_MEDIUM_AMD, 0x9147) \
	CONST(int, GL_DEBUG_SEVERITY_LOW_AMD, 0x9148) \
	CONST(int, GL_DEBUG_CATEGORY_API_ERROR_AMD, 0x9149) \
	CONST(int, GL_DEBUG_CATEGORY_WINDOW_SYSTEM_AMD, 0x914A) \
	CONST(int, GL_DEBUG_CATEGORY_DEPRECATION_AMD, 0x914B) \
	CONST(int, GL_DEBUG_CATEGORY_UNDEFINED_BEHAVIOR_AMD, 0x914C) \
	CONST(int, GL_DEBUG_CATEGORY_PERFORMANCE_AMD, 0x914D) \
	CONST(int, GL_DEBUG_CATEGORY_SHADER_COMPILER_AMD, 0x914E) \
	CONST(int, GL_DEBUG_CATEGORY_APPLICATION_AMD, 0x914F) \
	CONST(int, GL_DEBUG_CATEGORY_OTHER_AMD, 0x9150) \
	FUNC(void , glDebugMessageEnableAMD, GLDEBUGMESSAGEENABLEAMD, (GLenum category , GLenum severity , GLsizei count , const GLuint * ids , GLboolean enabled ), (category, severity, count, ids, enabled)) \
	FUNC(void , glDebugMessageInsertAMD, GLDEBUGMESSAGEINSERTAMD, (GLenum category , GLenum severity , GLuint id , GLsizei length , const GLchar * buf ), (category, severity, id, length, buf)) \
	FUNC(void , glDebugMessageCallbackAMD, GLDEBUGMESSAGECALLBACKAMD, (GLDEBUGPROCAMD callback , GLvoid * userParam ), (callback, userParam)) \
	FUNC(GLuint , glGetDebugMessageLogAMD, GLGETDEBUGMESSAGELOGAMD, (GLuint count , GLsizei bufsize , GLenum * categories , GLuint * severities , GLuint * ids , GLsizei * lengths , GLchar * message ), (count, bufsize, categories, severities, ids, lengths, message)) \
	END()
#else
#define EXTENSION_GL_AMD_debug_output(NAME, FUNC, CONST, END)
#endif

#ifndef GL_AMD_depth_clamp_separate
#define GL_AMD_depth_clamp_separate 1
#define EXTENSION_GL_AMD_depth_clamp_separate(NAME, FUNC, CONST, END) \
	NAME(GL_AMD_depth_clamp_separate) \
	CONST(int, GL_DEPTH_CLAMP_NEAR_AMD, 0x901E) \
	CONST(int, GL_DEPTH_CLAMP_FAR_AMD, 0x901F) \
	END()
#else
#define EXTENSION_GL_AMD_depth_clamp_separate(NAME, FUNC, CONST, END)
#endif

#ifndef GL_AMD_draw_buffers_blend
#define GL_AMD_draw_buffers_blend 1
#define EXTENSION_GL_AMD_draw_buffers_blend(NAME, FUNC, CONST, END) \
	NAME(GL_AMD_draw_buffers_blend) \
	FUNC(void , glBlendFuncIndexedAMD, GLBLENDFUNCINDEXEDAMD, (GLuint buf , GLenum src , GLenum dst ), (buf, src, dst)) \
	FUNC(void , glBlendFuncSeparateIndexedAMD, GLBLENDFUNCSEPARATEINDEXEDAMD, (GLuint buf , GLenum srcRGB , GLenum dstRGB , GLenum srcAlpha , GLenum dstAlpha ), (buf, srcRGB, dstRGB, srcAlpha, dstAlpha)) \
	FUNC(void , glBlendEquationIndexedAMD, GLBLENDEQUATIONINDEXEDAMD, (GLuint buf , GLenum mode ), (buf, mode)) \
	FUNC(void , glBlendEquationSeparateIndexedAMD, GLBLENDEQUATIONSEPARATEINDEXEDAMD, (GLuint buf , GLenum modeRGB , GLenum modeAlpha ), (buf, modeRGB, modeAlpha)) \
	END()
#else
#define EXTENSION_GL_AMD_draw_buffers_blend(NAME, FUNC, CONST, END)
#endif

#ifndef GL_AMD_name_gen_delete
#define GL_AMD_name_gen_delete 1
#define EXTENSION_GL_AMD_name_gen_delete(NAME, FUNC, CONST, END) \
	NAME(GL_AMD_name_gen_delete) \
	CONST(int, GL_DATA_BUFFER_AMD, 0x9151) \
	CONST(int, GL_PERFORMANCE_MONITOR_AMD, 0x9152) \
	CONST(int, GL_QUERY_OBJECT_AMD, 0x9153) \
	CONST(int, GL_VERTEX_ARRAY_OBJECT_AMD, 0x9154) \
	CONST(int, GL_SAMPLER_OBJECT_AMD, 0x9155) \
	FUNC(void , glGenNamesAMD, GLGENNAMESAMD, (GLenum identifier , GLuint num , GLuint * names ), (identifier, num, names)) \
	FUNC(void , glDeleteNamesAMD, GLDELETENAMESAMD, (GLenum identifier , GLuint num , const GLuint * names ), (identifier, num, names)) \
	FUNC(GLboolean , glIsNameAMD, GLISNAMEAMD, (GLenum identifier , GLuint name ), (identifier, name)) \
	END()
#else
#define EXTENSION_GL_AMD_name_gen_delete(NAME, FUNC, CONST, END)
#endif

#ifndef GL_AMD_performance_monitor
#define GL_AMD_performance_monitor 1
#define EXTENSION_GL_AMD_performance_monitor(NAME, FUNC, CONST, END) \
	NAME(GL_AMD_performance_monitor) \
	CONST(int, GL_COUNTER_TYPE_AMD, 0x8BC0) \
	CONST(int, GL_COUNTER_RANGE_AMD, 0x8BC1) \
	CONST(int, GL_UNSIGNED_INT64_AMD, 0x8BC2) \
	CONST(int, GL_PERCENTAGE_AMD, 0x8BC3) \
	CONST(int, GL_PERFMON_RESULT_AVAILABLE_AMD, 0x8BC4) \
	CONST(int, GL_PERFMON_RESULT_SIZE_AMD, 0x8BC5) \
	CONST(int, GL_PERFMON_RESULT_AMD, 0x8BC6) \
	FUNC(void , glGetPerfMonitorGroupsAMD, GLGETPERFMONITORGROUPSAMD, (GLint * numGroups , GLsizei groupsSize , GLuint * groups ), (numGroups, groupsSize, groups)) \
	FUNC(void , glGetPerfMonitorCountersAMD, GLGETPERFMONITORCOUNTERSAMD, (GLuint group , GLint * numCounters , GLint * maxActiveCounters , GLsizei counterSize , GLuint * counters ), (group, numCounters, maxActiveCounters, counterSize, counters)) \
	FUNC(void , glGetPerfMonitorGroupStringAMD, GLGETPERFMONITORGROUPSTRINGAMD, (GLuint group , GLsizei bufSize , GLsizei * length , GLchar * groupString ), (group, bufSize, length, groupString)) \
	FUNC(void , glGetPerfMonitorCounterStringAMD, GLGETPERFMONITORCOUNTERSTRINGAMD, (GLuint group , GLuint counter , GLsizei bufSize , GLsizei * length , GLchar * counterString ), (group, counter, bufSize, length, counterString)) \
	FUNC(void , glGetPerfMonitorCounterInfoAMD, GLGETPERFMONITORCOUNTERINFOAMD, (GLuint group , GLuint counter , GLenum pname , GLvoid * data ), (group, counter, pname, data)) \
	FUNC(void , glGenPerfMonitorsAMD, GLGENPERFMONITORSAMD, (GLsizei n , GLuint * monitors ), (n, monitors)) \
	FUNC(void , glDeletePerfMonitorsAMD, GLDELETEPERFMONITORSAMD, (GLsizei n , GLuint * monitors ), (n, monitors)) \
	FUNC(void , glSelectPerfMonitorCountersAMD, GLSELECTPERFMONITORCOUNTERSAMD, (GLuint monitor , GLboolean enable , GLuint group , GLint numCounters , GLuint * counterList ), (monitor, enable, group, numCounters, counterList)) \
	FUNC(void , glBeginPerfMonitorAMD, GLBEGINPERFMONITORAMD, (GLuint monitor ), (monitor)) \
	FUNC(void , glEndPerfMonitorAMD, GLENDPERFMONITORAMD, (GLuint monitor ), (monitor)) \
	FUNC(void , glGetPerfMonitorCounterDataAMD, GLGETPERFMONITORCOUNTERDATAAMD, (GLuint monitor , GLenum pname , GLsizei dataSize , GLuint * data , GLint * bytesWritten ), (monitor, pname, dataSize, data, bytesWritten)) \
	END()
#else
#define EXTENSION_GL_AMD_performance_monitor(NAME, FUNC, CONST, END)
#endif

#ifndef GL_AMD_seamless_cubemap_per_texture
#define GL_AMD_seamless_cubemap_per_texture 1
#define EXTENSION_GL_AMD_seamless_cubemap_per_texture(NAME, FUNC, CONST, END) \
	NAME(GL_AMD_seamless_cubemap_per_texture) \
	END()
#else
#define EXTENSION_GL_AMD_seamless_cubemap_per_texture(NAME, FUNC, CONST, END)
#endif

#ifndef GL_AMD_shader_stencil_export
#define GL_AMD_shader_stencil_export 1
#define EXTENSION_GL_AMD_shader_stencil_export(NAME, FUNC, CONST, END) \
	NAME(GL_AMD_shader_stencil_export) \
	END()
#else
#define EXTENSION_GL_AMD_shader_stencil_export(NAME, FUNC, CONST, END)
#endif

#ifndef GL_AMD_texture_texture4
#define GL_AMD_texture_texture4 1
#define EXTENSION_GL_AMD_texture_texture4(NAME, FUNC, CONST, END) \
	NAME(GL_AMD_texture_texture4) \
	END()
#else
#define EXTENSION_GL_AMD_texture_texture4(NAME, FUNC, CONST, END)
#endif

#ifndef GL_AMD_transform_feedback3_lines_triangles
#define GL_AMD_transform_feedback3_lines_triangles 1
#define EXTENSION_GL_AMD_transform_feedback3_lines_triangles(NAME, FUNC, CONST, END) \
	NAME(GL_AMD_transform_feedback3_lines_triangles) \
	END()
#else
#define EXTENSION_GL_AMD_transform_feedback3_lines_triangles(NAME, FUNC, CONST, END)
#endif

#ifndef GL_AMD_vertex_shader_tesselator
#define GL_AMD_vertex_shader_tesselator 1
#define EXTENSION_GL_AMD_vertex_shader_tesselator(NAME, FUNC, CONST, END) \
	NAME(GL_AMD_vertex_shader_tesselator) \
	CONST(int, GL_SAMPLER_BUFFER_AMD, 0x9001) \
	CONST(int, GL_INT_SAMPLER_BUFFER_AMD, 0x9002) \
	CONST(int, GL_UNSIGNED_INT_SAMPLER_BUFFER_AMD, 0x9003) \
	CONST(int, GL_TESSELLATION_MODE_AMD, 0x9004) \
	CONST(int, GL_TESSELLATION_FACTOR_AMD, 0x9005) \
	CONST(int, GL_DISCRETE_AMD, 0x9006) \
	CONST(int, GL_CONTINUOUS_AMD, 0x9007) \
	FUNC(void , glTessellationFactorAMD, GLTESSELLATIONFACTORAMD, (GLfloat factor ), (factor)) \
	FUNC(void , glTessellationModeAMD, GLTESSELLATIONMODEAMD, (GLenum mode ), (mode)) \
	END()
#else
#define EXTENSION_GL_AMD_vertex_shader_tesselator(NAME, FUNC, CONST, END)
#endif

#ifndef GL_APPLE_aux_depth_stencil
#define GL_APPLE_aux_depth_stencil 1
#define EXTENSION_GL_APPLE_aux_depth_stencil(NAME, FUNC, CONST, END) \
	NAME(GL_APPLE_aux_depth_stencil) \
	CONST(int, GL_AUX_DEPTH_STENCIL_APPLE, 0x8A14) \
	END()
#else
#define EXTENSION_GL_APPLE_aux_depth_stencil(NAME, FUNC, CONST, END)
#endif

#ifndef GL_APPLE_client_storage
#define GL_APPLE_client_storage 1
#define EXTENSION_GL_APPLE_client_storage(NAME, FUNC, CONST, END) \
	NAME(GL_APPLE_client_storage) \
	CONST(int, GL_UNPACK_CLIENT_STORAGE_APPLE, 0x85B2) \
	END()
#else
#define EXTENSION_GL_APPLE_client_storage(NAME, FUNC, CONST, END)
#endif

#ifndef GL_APPLE_element_array
#define GL_APPLE_element_array 1
#define EXTENSION_GL_APPLE_element_array(NAME, FUNC, CONST, END) \
	NAME(GL_APPLE_element_array) \
	CONST(int, GL_ELEMENT_ARRAY_APPLE, 0x8A0C) \
	CONST(int, GL_ELEMENT_ARRAY_TYPE_APPLE, 0x8A0D) \
	CONST(int, GL_ELEMENT_ARRAY_POINTER_APPLE, 0x8A0E) \
	FUNC(void , glElementPointerAPPLE, GLELEMENTPOINTERAPPLE, (GLenum type , const GLvoid * pointer ), (type, pointer)) \
	FUNC(void , glDrawElementArrayAPPLE, GLDRAWELEMENTARRAYAPPLE, (GLenum mode , GLint first , GLsizei count ), (mode, first, count)) \
	FUNC(void , glDrawRangeElementArrayAPPLE, GLDRAWRANGEELEMENTARRAYAPPLE, (GLenum mode , GLuint start , GLuint end , GLint first , GLsizei count ), (mode, start, end, first, count)) \
	FUNC(void , glMultiDrawElementArrayAPPLE, GLMULTIDRAWELEMENTARRAYAPPLE, (GLenum mode , const GLint * first , const GLsizei * count , GLsizei primcount ), (mode, first, count, primcount)) \
	FUNC(void , glMultiDrawRangeElementArrayAPPLE, GLMULTIDRAWRANGEELEMENTARRAYAPPLE, (GLenum mode , GLuint start , GLuint end , const GLint * first , const GLsizei * count , GLsizei primcount ), (mode, start, end, first, count, primcount)) \
	END()
#else
#define EXTENSION_GL_APPLE_element_array(NAME, FUNC, CONST, END)
#endif

#ifndef GL_APPLE_fence
#define GL_APPLE_fence 1
#define EXTENSION_GL_APPLE_fence(NAME, FUNC, CONST, END) \
	NAME(GL_APPLE_fence) \
	CONST(int, GL_DRAW_PIXELS_APPLE, 0x8A0A) \
	CONST(int, GL_FENCE_APPLE, 0x8A0B) \
	FUNC(void , glGenFencesAPPLE, GLGENFENCESAPPLE, (GLsizei n , GLuint * fences ), (n, fences)) \
	FUNC(void , glDeleteFencesAPPLE, GLDELETEFENCESAPPLE, (GLsizei n , const GLuint * fences ), (n, fences)) \
	FUNC(void , glSetFenceAPPLE, GLSETFENCEAPPLE, (GLuint fence ), (fence)) \
	FUNC(GLboolean , glIsFenceAPPLE, GLISFENCEAPPLE, (GLuint fence ), (fence)) \
	FUNC(GLboolean , glTestFenceAPPLE, GLTESTFENCEAPPLE, (GLuint fence ), (fence)) \
	FUNC(void , glFinishFenceAPPLE, GLFINISHFENCEAPPLE, (GLuint fence ), (fence)) \
	FUNC(GLboolean , glTestObjectAPPLE, GLTESTOBJECTAPPLE, (GLenum object , GLuint name ), (object, name)) \
	FUNC(void , glFinishObjectAPPLE, GLFINISHOBJECTAPPLE, (GLenum object , GLint name ), (object, name)) \
	END()
#else
#define EXTENSION_GL_APPLE_fence(NAME, FUNC, CONST, END)
#endif

#ifndef GL_APPLE_float_pixels
#define GL_APPLE_float_pixels 1
#define EXTENSION_GL_APPLE_float_pixels(NAME, FUNC, CONST, END) \
	NAME(GL_APPLE_float_pixels) \
	CONST(int, GL_HALF_APPLE, 0x140B) \
	CONST(int, GL_RGBA_FLOAT32_APPLE, 0x8814) \
	CONST(int, GL_RGB_FLOAT32_APPLE, 0x8815) \
	CONST(int, GL_ALPHA_FLOAT32_APPLE, 0x8816) \
	CONST(int, GL_INTENSITY_FLOAT32_APPLE, 0x8817) \
	CONST(int, GL_LUMINANCE_FLOAT32_APPLE, 0x8818) \
	CONST(int, GL_LUMINANCE_ALPHA_FLOAT32_APPLE, 0x8819) \
	CONST(int, GL_RGBA_FLOAT16_APPLE, 0x881A) \
	CONST(int, GL_RGB_FLOAT16_APPLE, 0x881B) \
	CONST(int, GL_ALPHA_FLOAT16_APPLE, 0x881C) \
	CONST(int, GL_INTENSITY_FLOAT16_APPLE, 0x881D) \
	CONST(int, GL_LUMINANCE_FLOAT16_APPLE, 0x881E) \
	CONST(int, GL_LUMINANCE_ALPHA_FLOAT16_APPLE, 0x881F) \
	CONST(int, GL_COLOR_FLOAT_APPLE, 0x8A0F) \
	END()
#else
#define EXTENSION_GL_APPLE_float_pixels(NAME, FUNC, CONST, END)
#endif

#ifndef GL_APPLE_flush_buffer_range
#define GL_APPLE_flush_buffer_range 1
#define EXTENSION_GL_APPLE_flush_buffer_range(NAME, FUNC, CONST, END) \
	NAME(GL_APPLE_flush_buffer_range) \
	CONST(int, GL_BUFFER_SERIALIZED_MODIFY_APPLE, 0x8A12) \
	CONST(int, GL_BUFFER_FLUSHING_UNMAP_APPLE, 0x8A13) \
	FUNC(void , glBufferParameteriAPPLE, GLBUFFERPARAMETERIAPPLE, (GLenum target , GLenum pname , GLint param ), (target, pname, param)) \
	FUNC(void , glFlushMappedBufferRangeAPPLE, GLFLUSHMAPPEDBUFFERRANGEAPPLE, (GLenum target , GLintptr offset , GLsizeiptr size ), (target, offset, size)) \
	END()
#else
#define EXTENSION_GL_APPLE_flush_buffer_range(NAME, FUNC, CONST, END)
#endif

#ifndef GL_APPLE_object_purgeable
#define GL_APPLE_object_purgeable 1
#define EXTENSION_GL_APPLE_object_purgeable(NAME, FUNC, CONST, END) \
	NAME(GL_APPLE_object_purgeable) \
	CONST(int, GL_BUFFER_OBJECT_APPLE, 0x85B3) \
	CONST(int, GL_RELEASED_APPLE, 0x8A19) \
	CONST(int, GL_VOLATILE_APPLE, 0x8A1A) \
	CONST(int, GL_RETAINED_APPLE, 0x8A1B) \
	CONST(int, GL_UNDEFINED_APPLE, 0x8A1C) \
	CONST(int, GL_PURGEABLE_APPLE, 0x8A1D) \
	FUNC(GLenum , glObjectPurgeableAPPLE, GLOBJECTPURGEABLEAPPLE, (GLenum objectType , GLuint name , GLenum option ), (objectType, name, option)) \
	FUNC(GLenum , glObjectUnpurgeableAPPLE, GLOBJECTUNPURGEABLEAPPLE, (GLenum objectType , GLuint name , GLenum option ), (objectType, name, option)) \
	FUNC(void , glGetObjectParameterivAPPLE, GLGETOBJECTPARAMETERIVAPPLE, (GLenum objectType , GLuint name , GLenum pname , GLint * params ), (objectType, name, pname, params)) \
	END()
#else
#define EXTENSION_GL_APPLE_object_purgeable(NAME, FUNC, CONST, END)
#endif

#ifndef GL_APPLE_rgb_422
#define GL_APPLE_rgb_422 1
#define EXTENSION_GL_APPLE_rgb_422(NAME, FUNC, CONST, END) \
	NAME(GL_APPLE_rgb_422) \
	CONST(int, GL_RGB_422_APPLE, 0x8A1F) \
	END()
#else
#define EXTENSION_GL_APPLE_rgb_422(NAME, FUNC, CONST, END)
#endif

#ifndef GL_APPLE_row_bytes
#define GL_APPLE_row_bytes 1
#define EXTENSION_GL_APPLE_row_bytes(NAME, FUNC, CONST, END) \
	NAME(GL_APPLE_row_bytes) \
	CONST(int, GL_PACK_ROW_BYTES_APPLE, 0x8A15) \
	CONST(int, GL_UNPACK_ROW_BYTES_APPLE, 0x8A16) \
	END()
#else
#define EXTENSION_GL_APPLE_row_bytes(NAME, FUNC, CONST, END)
#endif

#ifndef GL_APPLE_specular_vector
#define GL_APPLE_specular_vector 1
#define EXTENSION_GL_APPLE_specular_vector(NAME, FUNC, CONST, END) \
	NAME(GL_APPLE_specular_vector) \
	CONST(int, GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE, 0x85B0) \
	END()
#else
#define EXTENSION_GL_APPLE_specular_vector(NAME, FUNC, CONST, END)
#endif

#ifndef GL_APPLE_texture_range
#define GL_APPLE_texture_range 1
#define EXTENSION_GL_APPLE_texture_range(NAME, FUNC, CONST, END) \
	NAME(GL_APPLE_texture_range) \
	CONST(int, GL_TEXTURE_RANGE_LENGTH_APPLE, 0x85B7) \
	CONST(int, GL_TEXTURE_RANGE_POINTER_APPLE, 0x85B8) \
	CONST(int, GL_TEXTURE_STORAGE_HINT_APPLE, 0x85BC) \
	CONST(int, GL_STORAGE_PRIVATE_APPLE, 0x85BD) \
	FUNC(void , glTextureRangeAPPLE, GLTEXTURERANGEAPPLE, (GLenum target , GLsizei length , const GLvoid * pointer ), (target, length, pointer)) \
	FUNC(void , glGetTexParameterPointervAPPLE, GLGETTEXPARAMETERPOINTERVAPPLE, (GLenum target , GLenum pname , GLvoid * * params ), (target, pname, params)) \
	END()
#else
#define EXTENSION_GL_APPLE_texture_range(NAME, FUNC, CONST, END)
#endif

#ifndef GL_APPLE_transform_hint
#define GL_APPLE_transform_hint 1
#define EXTENSION_GL_APPLE_transform_hint(NAME, FUNC, CONST, END) \
	NAME(GL_APPLE_transform_hint) \
	CONST(int, GL_TRANSFORM_HINT_APPLE, 0x85B1) \
	END()
#else
#define EXTENSION_GL_APPLE_transform_hint(NAME, FUNC, CONST, END)
#endif

#ifndef GL_APPLE_vertex_array_object
#define GL_APPLE_vertex_array_object 1
#define EXTENSION_GL_APPLE_vertex_array_object(NAME, FUNC, CONST, END) \
	NAME(GL_APPLE_vertex_array_object) \
	CONST(int, GL_VERTEX_ARRAY_BINDING_APPLE, 0x85B5) \
	FUNC(void , glBindVertexArrayAPPLE, GLBINDVERTEXARRAYAPPLE, (GLuint array ), (array)) \
	FUNC(void , glDeleteVertexArraysAPPLE, GLDELETEVERTEXARRAYSAPPLE, (GLsizei n , const GLuint * arrays ), (n, arrays)) \
	FUNC(void , glGenVertexArraysAPPLE, GLGENVERTEXARRAYSAPPLE, (GLsizei n , GLuint * arrays ), (n, arrays)) \
	FUNC(GLboolean , glIsVertexArrayAPPLE, GLISVERTEXARRAYAPPLE, (GLuint array ), (array)) \
	END()
#else
#define EXTENSION_GL_APPLE_vertex_array_object(NAME, FUNC, CONST, END)
#endif

#ifndef GL_APPLE_vertex_array_range
#define GL_APPLE_vertex_array_range 1
#define EXTENSION_GL_APPLE_vertex_array_range(NAME, FUNC, CONST, END) \
	NAME(GL_APPLE_vertex_array_range) \
	CONST(int, GL_VERTEX_ARRAY_RANGE_APPLE, 0x851D) \
	CONST(int, GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE, 0x851E) \
	CONST(int, GL_VERTEX_ARRAY_STORAGE_HINT_APPLE, 0x851F) \
	CONST(int, GL_VERTEX_ARRAY_RANGE_POINTER_APPLE, 0x8521) \
	CONST(int, GL_STORAGE_CLIENT_APPLE, 0x85B4) \
	CONST(int, GL_STORAGE_CACHED_APPLE, 0x85BE) \
	CONST(int, GL_STORAGE_SHARED_APPLE, 0x85BF) \
	FUNC(void , glVertexArrayRangeAPPLE, GLVERTEXARRAYRANGEAPPLE, (GLsizei length , GLvoid * pointer ), (length, pointer)) \
	FUNC(void , glFlushVertexArrayRangeAPPLE, GLFLUSHVERTEXARRAYRANGEAPPLE, (GLsizei length , GLvoid * pointer ), (length, pointer)) \
	FUNC(void , glVertexArrayParameteriAPPLE, GLVERTEXARRAYPARAMETERIAPPLE, (GLenum pname , GLint param ), (pname, param)) \
	END()
#else
#define EXTENSION_GL_APPLE_vertex_array_range(NAME, FUNC, CONST, END)
#endif

#ifndef GL_APPLE_vertex_program_evaluators
#define GL_APPLE_vertex_program_evaluators 1
#define EXTENSION_GL_APPLE_vertex_program_evaluators(NAME, FUNC, CONST, END) \
	NAME(GL_APPLE_vertex_program_evaluators) \
	CONST(int, GL_VERTEX_ATTRIB_MAP1_APPLE, 0x8A00) \
	CONST(int, GL_VERTEX_ATTRIB_MAP2_APPLE, 0x8A01) \
	CONST(int, GL_VERTEX_ATTRIB_MAP1_SIZE_APPLE, 0x8A02) \
	CONST(int, GL_VERTEX_ATTRIB_MAP1_COEFF_APPLE, 0x8A03) \
	CONST(int, GL_VERTEX_ATTRIB_MAP1_ORDER_APPLE, 0x8A04) \
	CONST(int, GL_VERTEX_ATTRIB_MAP1_DOMAIN_APPLE, 0x8A05) \
	CONST(int, GL_VERTEX_ATTRIB_MAP2_SIZE_APPLE, 0x8A06) \
	CONST(int, GL_VERTEX_ATTRIB_MAP2_COEFF_APPLE, 0x8A07) \
	CONST(int, GL_VERTEX_ATTRIB_MAP2_ORDER_APPLE, 0x8A08) \
	CONST(int, GL_VERTEX_ATTRIB_MAP2_DOMAIN_APPLE, 0x8A09) \
	FUNC(void , glEnableVertexAttribAPPLE, GLENABLEVERTEXATTRIBAPPLE, (GLuint index , GLenum pname ), (index, pname)) \
	FUNC(void , glDisableVertexAttribAPPLE, GLDISABLEVERTEXATTRIBAPPLE, (GLuint index , GLenum pname ), (index, pname)) \
	FUNC(GLboolean , glIsVertexAttribEnabledAPPLE, GLISVERTEXATTRIBENABLEDAPPLE, (GLuint index , GLenum pname ), (index, pname)) \
	FUNC(void , glMapVertexAttrib1dAPPLE, GLMAPVERTEXATTRIB1DAPPLE, (GLuint index , GLuint size , GLdouble u1 , GLdouble u2 , GLint stride , GLint order , const GLdouble * points ), (index, size, u1, u2, stride, order, points)) \
	FUNC(void , glMapVertexAttrib1fAPPLE, GLMAPVERTEXATTRIB1FAPPLE, (GLuint index , GLuint size , GLfloat u1 , GLfloat u2 , GLint stride , GLint order , const GLfloat * points ), (index, size, u1, u2, stride, order, points)) \
	FUNC(void , glMapVertexAttrib2dAPPLE, GLMAPVERTEXATTRIB2DAPPLE, (GLuint index , GLuint size , GLdouble u1 , GLdouble u2 , GLint ustride , GLint uorder , GLdouble v1 , GLdouble v2 , GLint vstride , GLint vorder , const GLdouble * points ), (index, size, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points)) \
	FUNC(void , glMapVertexAttrib2fAPPLE, GLMAPVERTEXATTRIB2FAPPLE, (GLuint index , GLuint size , GLfloat u1 , GLfloat u2 , GLint ustride , GLint uorder , GLfloat v1 , GLfloat v2 , GLint vstride , GLint vorder , const GLfloat * points ), (index, size, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points)) \
	END()
#else
#define EXTENSION_GL_APPLE_vertex_program_evaluators(NAME, FUNC, CONST, END)
#endif

#ifndef GL_APPLE_ycbcr_422
#define GL_APPLE_ycbcr_422 1
#define EXTENSION_GL_APPLE_ycbcr_422(NAME, FUNC, CONST, END) \
	NAME(GL_APPLE_ycbcr_422) \
	CONST(int, GL_YCBCR_422_APPLE, 0x85B9) \
	CONST(int, GL_UNSIGNED_SHORT_8_8_APPLE, 0x85BA) \
	CONST(int, GL_UNSIGNED_SHORT_8_8_REV_APPLE, 0x85BB) \
	END()
#else
#define EXTENSION_GL_APPLE_ycbcr_422(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_ES2_compatibility
#define GL_ARB_ES2_compatibility 1
#define EXTENSION_GL_ARB_ES2_compatibility(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_ES2_compatibility) \
	CONST(int, GL_FIXED, 0x140C) \
	CONST(int, GL_IMPLEMENTATION_COLOR_READ_TYPE, 0x8B9A) \
	CONST(int, GL_IMPLEMENTATION_COLOR_READ_FORMAT, 0x8B9B) \
	CONST(int, GL_LOW_FLOAT, 0x8DF0) \
	CONST(int, GL_MEDIUM_FLOAT, 0x8DF1) \
	CONST(int, GL_HIGH_FLOAT, 0x8DF2) \
	CONST(int, GL_LOW_INT, 0x8DF3) \
	CONST(int, GL_MEDIUM_INT, 0x8DF4) \
	CONST(int, GL_HIGH_INT, 0x8DF5) \
	CONST(int, GL_SHADER_COMPILER, 0x8DFA) \
	CONST(int, GL_NUM_SHADER_BINARY_FORMATS, 0x8DF9) \
	CONST(int, GL_MAX_VERTEX_UNIFORM_VECTORS, 0x8DFB) \
	CONST(int, GL_MAX_VARYING_VECTORS, 0x8DFC) \
	CONST(int, GL_MAX_FRAGMENT_UNIFORM_VECTORS, 0x8DFD) \
	FUNC(void , glReleaseShaderCompiler, GLRELEASESHADERCOMPILER, (void ), ()) \
	FUNC(void , glShaderBinary, GLSHADERBINARY, (GLsizei count , const GLuint * shaders , GLenum binaryformat , const GLvoid * binary , GLsizei length ), (count, shaders, binaryformat, binary, length)) \
	FUNC(void , glGetShaderPrecisionFormat, GLGETSHADERPRECISIONFORMAT, (GLenum shadertype , GLenum precisiontype , GLint * range , GLint * precision ), (shadertype, precisiontype, range, precision)) \
	FUNC(void , glDepthRangef, GLDEPTHRANGEF, (GLclampf n , GLclampf f ), (n, f)) \
	FUNC(void , glClearDepthf, GLCLEARDEPTHF, (GLclampf d ), (d)) \
	END()
#else
#define EXTENSION_GL_ARB_ES2_compatibility(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_blend_func_extended
#define GL_ARB_blend_func_extended 1
#define EXTENSION_GL_ARB_blend_func_extended(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_blend_func_extended) \
	CONST(int, GL_SRC1_COLOR, 0x88F9) \
	CONST(int, GL_ONE_MINUS_SRC1_COLOR, 0x88FA) \
	CONST(int, GL_ONE_MINUS_SRC1_ALPHA, 0x88FB) \
	CONST(int, GL_MAX_DUAL_SOURCE_DRAW_BUFFERS, 0x88FC) \
	FUNC(void , glBindFragDataLocationIndexed, GLBINDFRAGDATALOCATIONINDEXED, (GLuint program , GLuint colorNumber , GLuint index , const GLchar * name ), (program, colorNumber, index, name)) \
	FUNC(GLint , glGetFragDataIndex, GLGETFRAGDATAINDEX, (GLuint program , const GLchar * name ), (program, name)) \
	END()
#else
#define EXTENSION_GL_ARB_blend_func_extended(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_cl_event
#define GL_ARB_cl_event 1
#define EXTENSION_GL_ARB_cl_event(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_cl_event) \
	CONST(int, GL_SYNC_CL_EVENT_ARB, 0x8240) \
	CONST(int, GL_SYNC_CL_EVENT_COMPLETE_ARB, 0x8241) \
	FUNC(GLsync , glCreateSyncFromCLeventARB, GLCREATESYNCFROMCLEVENTARB, (struct _cl_context * context , struct _cl_event * event , GLbitfield flags ), (context, event, flags)) \
	END()
#else
#define EXTENSION_GL_ARB_cl_event(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_color_buffer_float
#define GL_ARB_color_buffer_float 1
#define EXTENSION_GL_ARB_color_buffer_float(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_color_buffer_float) \
	CONST(int, GL_RGBA_FLOAT_MODE_ARB, 0x8820) \
	CONST(int, GL_CLAMP_VERTEX_COLOR_ARB, 0x891A) \
	CONST(int, GL_CLAMP_FRAGMENT_COLOR_ARB, 0x891B) \
	CONST(int, GL_CLAMP_READ_COLOR_ARB, 0x891C) \
	CONST(int, GL_FIXED_ONLY_ARB, 0x891D) \
	FUNC(void , glClampColorARB, GLCLAMPCOLORARB, (GLenum target , GLenum clamp ), (target, clamp)) \
	END()
#else
#define EXTENSION_GL_ARB_color_buffer_float(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_compatibility
#define GL_ARB_compatibility 1
#define EXTENSION_GL_ARB_compatibility(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_compatibility) \
	END()
#else
#define EXTENSION_GL_ARB_compatibility(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_copy_buffer
#define GL_ARB_copy_buffer 1
#define EXTENSION_GL_ARB_copy_buffer(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_copy_buffer) \
	CONST(int, GL_COPY_READ_BUFFER, 0x8F36) \
	CONST(int, GL_COPY_WRITE_BUFFER, 0x8F37) \
	FUNC(void , glCopyBufferSubData, GLCOPYBUFFERSUBDATA, (GLenum readTarget , GLenum writeTarget , GLintptr readOffset , GLintptr writeOffset , GLsizeiptr size ), (readTarget, writeTarget, readOffset, writeOffset, size)) \
	END()
#else
#define EXTENSION_GL_ARB_copy_buffer(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_debug_output
#define GL_ARB_debug_output 1
#define EXTENSION_GL_ARB_debug_output(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_debug_output) \
	CONST(int, GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB, 0x8242) \
	CONST(int, GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB, 0x8243) \
	CONST(int, GL_DEBUG_CALLBACK_FUNCTION_ARB, 0x8244) \
	CONST(int, GL_DEBUG_CALLBACK_USER_PARAM_ARB, 0x8245) \
	CONST(int, GL_DEBUG_SOURCE_API_ARB, 0x8246) \
	CONST(int, GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB, 0x8247) \
	CONST(int, GL_DEBUG_SOURCE_SHADER_COMPILER_ARB, 0x8248) \
	CONST(int, GL_DEBUG_SOURCE_THIRD_PARTY_ARB, 0x8249) \
	CONST(int, GL_DEBUG_SOURCE_APPLICATION_ARB, 0x824A) \
	CONST(int, GL_DEBUG_SOURCE_OTHER_ARB, 0x824B) \
	CONST(int, GL_DEBUG_TYPE_ERROR_ARB, 0x824C) \
	CONST(int, GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB, 0x824D) \
	CONST(int, GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB, 0x824E) \
	CONST(int, GL_DEBUG_TYPE_PORTABILITY_ARB, 0x824F) \
	CONST(int, GL_DEBUG_TYPE_PERFORMANCE_ARB, 0x8250) \
	CONST(int, GL_DEBUG_TYPE_OTHER_ARB, 0x8251) \
	CONST(int, GL_MAX_DEBUG_MESSAGE_LENGTH_ARB, 0x9143) \
	CONST(int, GL_MAX_DEBUG_LOGGED_MESSAGES_ARB, 0x9144) \
	CONST(int, GL_DEBUG_LOGGED_MESSAGES_ARB, 0x9145) \
	CONST(int, GL_DEBUG_SEVERITY_HIGH_ARB, 0x9146) \
	CONST(int, GL_DEBUG_SEVERITY_MEDIUM_ARB, 0x9147) \
	CONST(int, GL_DEBUG_SEVERITY_LOW_ARB, 0x9148) \
	FUNC(void , glDebugMessageControlARB, GLDEBUGMESSAGECONTROLARB, (GLenum source , GLenum type , GLenum severity , GLsizei count , const GLuint * ids , GLboolean enabled ), (source, type, severity, count, ids, enabled)) \
	FUNC(void , glDebugMessageInsertARB, GLDEBUGMESSAGEINSERTARB, (GLenum source , GLenum type , GLuint id , GLenum severity , GLsizei length , const GLchar * buf ), (source, type, id, severity, length, buf)) \
	FUNC(void , glDebugMessageCallbackARB, GLDEBUGMESSAGECALLBACKARB, (GLDEBUGPROCARB callback , const GLvoid * userParam ), (callback, userParam)) \
	FUNC(GLuint , glGetDebugMessageLogARB, GLGETDEBUGMESSAGELOGARB, (GLuint count , GLsizei bufsize , GLenum * sources , GLenum * types , GLuint * ids , GLenum * severities , GLsizei * lengths , GLchar * messageLog ), (count, bufsize, sources, types, ids, severities, lengths, messageLog)) \
	END()
#else
#define EXTENSION_GL_ARB_debug_output(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_depth_buffer_float
#define GL_ARB_depth_buffer_float 1
#define EXTENSION_GL_ARB_depth_buffer_float(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_depth_buffer_float) \
	CONST(int, GL_DEPTH_COMPONENT32F, 0x8CAC) \
	CONST(int, GL_DEPTH32F_STENCIL8, 0x8CAD) \
	CONST(int, GL_FLOAT_32_UNSIGNED_INT_24_8_REV, 0x8DAD) \
	END()
#else
#define EXTENSION_GL_ARB_depth_buffer_float(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_depth_clamp
#define GL_ARB_depth_clamp 1
#define EXTENSION_GL_ARB_depth_clamp(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_depth_clamp) \
	CONST(int, GL_DEPTH_CLAMP, 0x864F) \
	END()
#else
#define EXTENSION_GL_ARB_depth_clamp(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_depth_texture
#define GL_ARB_depth_texture 1
#define EXTENSION_GL_ARB_depth_texture(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_depth_texture) \
	CONST(int, GL_DEPTH_COMPONENT16_ARB, 0x81A5) \
	CONST(int, GL_DEPTH_COMPONENT24_ARB, 0x81A6) \
	CONST(int, GL_DEPTH_COMPONENT32_ARB, 0x81A7) \
	CONST(int, GL_TEXTURE_DEPTH_SIZE_ARB, 0x884A) \
	CONST(int, GL_DEPTH_TEXTURE_MODE_ARB, 0x884B) \
	END()
#else
#define EXTENSION_GL_ARB_depth_texture(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_draw_buffers
#define GL_ARB_draw_buffers 1
#define EXTENSION_GL_ARB_draw_buffers(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_draw_buffers) \
	CONST(int, GL_MAX_DRAW_BUFFERS_ARB, 0x8824) \
	CONST(int, GL_DRAW_BUFFER0_ARB, 0x8825) \
	CONST(int, GL_DRAW_BUFFER1_ARB, 0x8826) \
	CONST(int, GL_DRAW_BUFFER2_ARB, 0x8827) \
	CONST(int, GL_DRAW_BUFFER3_ARB, 0x8828) \
	CONST(int, GL_DRAW_BUFFER4_ARB, 0x8829) \
	CONST(int, GL_DRAW_BUFFER5_ARB, 0x882A) \
	CONST(int, GL_DRAW_BUFFER6_ARB, 0x882B) \
	CONST(int, GL_DRAW_BUFFER7_ARB, 0x882C) \
	CONST(int, GL_DRAW_BUFFER8_ARB, 0x882D) \
	CONST(int, GL_DRAW_BUFFER9_ARB, 0x882E) \
	CONST(int, GL_DRAW_BUFFER10_ARB, 0x882F) \
	CONST(int, GL_DRAW_BUFFER11_ARB, 0x8830) \
	CONST(int, GL_DRAW_BUFFER12_ARB, 0x8831) \
	CONST(int, GL_DRAW_BUFFER13_ARB, 0x8832) \
	CONST(int, GL_DRAW_BUFFER14_ARB, 0x8833) \
	CONST(int, GL_DRAW_BUFFER15_ARB, 0x8834) \
	FUNC(void , glDrawBuffersARB, GLDRAWBUFFERSARB, (GLsizei n , const GLenum * bufs ), (n, bufs)) \
	END()
#else
#define EXTENSION_GL_ARB_draw_buffers(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_draw_buffers_blend
#define GL_ARB_draw_buffers_blend 1
#define EXTENSION_GL_ARB_draw_buffers_blend(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_draw_buffers_blend) \
	FUNC(void , glBlendEquationiARB, GLBLENDEQUATIONIARB, (GLuint buf , GLenum mode ), (buf, mode)) \
	FUNC(void , glBlendEquationSeparateiARB, GLBLENDEQUATIONSEPARATEIARB, (GLuint buf , GLenum modeRGB , GLenum modeAlpha ), (buf, modeRGB, modeAlpha)) \
	FUNC(void , glBlendFunciARB, GLBLENDFUNCIARB, (GLuint buf , GLenum src , GLenum dst ), (buf, src, dst)) \
	FUNC(void , glBlendFuncSeparateiARB, GLBLENDFUNCSEPARATEIARB, (GLuint buf , GLenum srcRGB , GLenum dstRGB , GLenum srcAlpha , GLenum dstAlpha ), (buf, srcRGB, dstRGB, srcAlpha, dstAlpha)) \
	END()
#else
#define EXTENSION_GL_ARB_draw_buffers_blend(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_draw_elements_base_vertex
#define GL_ARB_draw_elements_base_vertex 1
#define EXTENSION_GL_ARB_draw_elements_base_vertex(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_draw_elements_base_vertex) \
	FUNC(void , glDrawElementsBaseVertex, GLDRAWELEMENTSBASEVERTEX, (GLenum mode , GLsizei count , GLenum type , const GLvoid * indices , GLint basevertex ), (mode, count, type, indices, basevertex)) \
	FUNC(void , glDrawRangeElementsBaseVertex, GLDRAWRANGEELEMENTSBASEVERTEX, (GLenum mode , GLuint start , GLuint end , GLsizei count , GLenum type , const GLvoid * indices , GLint basevertex ), (mode, start, end, count, type, indices, basevertex)) \
	FUNC(void , glDrawElementsInstancedBaseVertex, GLDRAWELEMENTSINSTANCEDBASEVERTEX, (GLenum mode , GLsizei count , GLenum type , const GLvoid * indices , GLsizei primcount , GLint basevertex ), (mode, count, type, indices, primcount, basevertex)) \
	FUNC(void , glMultiDrawElementsBaseVertex, GLMULTIDRAWELEMENTSBASEVERTEX, (GLenum mode , const GLsizei * count , GLenum type , const GLvoid * * indices , GLsizei primcount , const GLint * basevertex ), (mode, count, type, indices, primcount, basevertex)) \
	END()
#else
#define EXTENSION_GL_ARB_draw_elements_base_vertex(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_draw_indirect
#define GL_ARB_draw_indirect 1
#define EXTENSION_GL_ARB_draw_indirect(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_draw_indirect) \
	CONST(int, GL_DRAW_INDIRECT_BUFFER, 0x8F3F) \
	CONST(int, GL_DRAW_INDIRECT_BUFFER_BINDING, 0x8F43) \
	FUNC(void , glDrawArraysIndirect, GLDRAWARRAYSINDIRECT, (GLenum mode , const GLvoid * indirect ), (mode, indirect)) \
	FUNC(void , glDrawElementsIndirect, GLDRAWELEMENTSINDIRECT, (GLenum mode , GLenum type , const GLvoid * indirect ), (mode, type, indirect)) \
	END()
#else
#define EXTENSION_GL_ARB_draw_indirect(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_draw_instanced
#define GL_ARB_draw_instanced 1
#define EXTENSION_GL_ARB_draw_instanced(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_draw_instanced) \
	FUNC(void , glDrawArraysInstancedARB, GLDRAWARRAYSINSTANCEDARB, (GLenum mode , GLint first , GLsizei count , GLsizei primcount ), (mode, first, count, primcount)) \
	FUNC(void , glDrawElementsInstancedARB, GLDRAWELEMENTSINSTANCEDARB, (GLenum mode , GLsizei count , GLenum type , const GLvoid * indices , GLsizei primcount ), (mode, count, type, indices, primcount)) \
	END()
#else
#define EXTENSION_GL_ARB_draw_instanced(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_explicit_attrib_location
#define GL_ARB_explicit_attrib_location 1
#define EXTENSION_GL_ARB_explicit_attrib_location(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_explicit_attrib_location) \
	END()
#else
#define EXTENSION_GL_ARB_explicit_attrib_location(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_fragment_coord_conventions
#define GL_ARB_fragment_coord_conventions 1
#define EXTENSION_GL_ARB_fragment_coord_conventions(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_fragment_coord_conventions) \
	END()
#else
#define EXTENSION_GL_ARB_fragment_coord_conventions(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_fragment_program
#define GL_ARB_fragment_program 1
#define EXTENSION_GL_ARB_fragment_program(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_fragment_program) \
	CONST(int, GL_FRAGMENT_PROGRAM_ARB, 0x8804) \
	CONST(int, GL_PROGRAM_ALU_INSTRUCTIONS_ARB, 0x8805) \
	CONST(int, GL_PROGRAM_TEX_INSTRUCTIONS_ARB, 0x8806) \
	CONST(int, GL_PROGRAM_TEX_INDIRECTIONS_ARB, 0x8807) \
	CONST(int, GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB, 0x8808) \
	CONST(int, GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB, 0x8809) \
	CONST(int, GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB, 0x880A) \
	CONST(int, GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB, 0x880B) \
	CONST(int, GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB, 0x880C) \
	CONST(int, GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB, 0x880D) \
	CONST(int, GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB, 0x880E) \
	CONST(int, GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB, 0x880F) \
	CONST(int, GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB, 0x8810) \
	CONST(int, GL_MAX_TEXTURE_COORDS_ARB, 0x8871) \
	CONST(int, GL_MAX_TEXTURE_IMAGE_UNITS_ARB, 0x8872) \
	END()
#else
#define EXTENSION_GL_ARB_fragment_program(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_fragment_program_shadow
#define GL_ARB_fragment_program_shadow 1
#define EXTENSION_GL_ARB_fragment_program_shadow(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_fragment_program_shadow) \
	END()
#else
#define EXTENSION_GL_ARB_fragment_program_shadow(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_fragment_shader
#define GL_ARB_fragment_shader 1
#define EXTENSION_GL_ARB_fragment_shader(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_fragment_shader) \
	CONST(int, GL_FRAGMENT_SHADER_ARB, 0x8B30) \
	CONST(int, GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB, 0x8B49) \
	CONST(int, GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB, 0x8B8B) \
	END()
#else
#define EXTENSION_GL_ARB_fragment_shader(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_framebuffer_object
#define GL_ARB_framebuffer_object 1
#define EXTENSION_GL_ARB_framebuffer_object(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_framebuffer_object) \
	CONST(int, GL_INVALID_FRAMEBUFFER_OPERATION, 0x0506) \
	CONST(int, GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING, 0x8210) \
	CONST(int, GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE, 0x8211) \
	CONST(int, GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE, 0x8212) \
	CONST(int, GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE, 0x8213) \
	CONST(int, GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE, 0x8214) \
	CONST(int, GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE, 0x8215) \
	CONST(int, GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE, 0x8216) \
	CONST(int, GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE, 0x8217) \
	CONST(int, GL_FRAMEBUFFER_DEFAULT, 0x8218) \
	CONST(int, GL_FRAMEBUFFER_UNDEFINED, 0x8219) \
	CONST(int, GL_DEPTH_STENCIL_ATTACHMENT, 0x821A) \
	CONST(int, GL_MAX_RENDERBUFFER_SIZE, 0x84E8) \
	CONST(int, GL_DEPTH_STENCIL, 0x84F9) \
	CONST(int, GL_UNSIGNED_INT_24_8, 0x84FA) \
	CONST(int, GL_DEPTH24_STENCIL8, 0x88F0) \
	CONST(int, GL_TEXTURE_STENCIL_SIZE, 0x88F1) \
	CONST(int, GL_TEXTURE_RED_TYPE, 0x8C10) \
	CONST(int, GL_TEXTURE_GREEN_TYPE, 0x8C11) \
	CONST(int, GL_TEXTURE_BLUE_TYPE, 0x8C12) \
	CONST(int, GL_TEXTURE_ALPHA_TYPE, 0x8C13) \
	CONST(int, GL_TEXTURE_DEPTH_TYPE, 0x8C16) \
	CONST(int, GL_UNSIGNED_NORMALIZED, 0x8C17) \
	CONST(int, GL_FRAMEBUFFER_BINDING, 0x8CA6) \
	CONST(int, GL_DRAW_FRAMEBUFFER_BINDING, 0x8CA6) \
	CONST(int, GL_RENDERBUFFER_BINDING, 0x8CA7) \
	CONST(int, GL_READ_FRAMEBUFFER, 0x8CA8) \
	CONST(int, GL_DRAW_FRAMEBUFFER, 0x8CA9) \
	CONST(int, GL_READ_FRAMEBUFFER_BINDING, 0x8CAA) \
	CONST(int, GL_RENDERBUFFER_SAMPLES, 0x8CAB) \
	CONST(int, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, 0x8CD0) \
	CONST(int, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, 0x8CD1) \
	CONST(int, GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL, 0x8CD2) \
	CONST(int, GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE, 0x8CD3) \
	CONST(int, GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER, 0x8CD4) \
	CONST(int, GL_FRAMEBUFFER_COMPLETE, 0x8CD5) \
	CONST(int, GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT, 0x8CD6) \
	CONST(int, GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT, 0x8CD7) \
	CONST(int, GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER, 0x8CDB) \
	CONST(int, GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER, 0x8CDC) \
	CONST(int, GL_FRAMEBUFFER_UNSUPPORTED, 0x8CDD) \
	CONST(int, GL_MAX_COLOR_ATTACHMENTS, 0x8CDF) \
	CONST(int, GL_COLOR_ATTACHMENT0, 0x8CE0) \
	CONST(int, GL_COLOR_ATTACHMENT1, 0x8CE1) \
	CONST(int, GL_COLOR_ATTACHMENT2, 0x8CE2) \
	CONST(int, GL_COLOR_ATTACHMENT3, 0x8CE3) \
	CONST(int, GL_COLOR_ATTACHMENT4, 0x8CE4) \
	CONST(int, GL_COLOR_ATTACHMENT5, 0x8CE5) \
	CONST(int, GL_COLOR_ATTACHMENT6, 0x8CE6) \
	CONST(int, GL_COLOR_ATTACHMENT7, 0x8CE7) \
	CONST(int, GL_COLOR_ATTACHMENT8, 0x8CE8) \
	CONST(int, GL_COLOR_ATTACHMENT9, 0x8CE9) \
	CONST(int, GL_COLOR_ATTACHMENT10, 0x8CEA) \
	CONST(int, GL_COLOR_ATTACHMENT11, 0x8CEB) \
	CONST(int, GL_COLOR_ATTACHMENT12, 0x8CEC) \
	CONST(int, GL_COLOR_ATTACHMENT13, 0x8CED) \
	CONST(int, GL_COLOR_ATTACHMENT14, 0x8CEE) \
	CONST(int, GL_COLOR_ATTACHMENT15, 0x8CEF) \
	CONST(int, GL_DEPTH_ATTACHMENT, 0x8D00) \
	CONST(int, GL_STENCIL_ATTACHMENT, 0x8D20) \
	CONST(int, GL_FRAMEBUFFER, 0x8D40) \
	CONST(int, GL_RENDERBUFFER, 0x8D41) \
	CONST(int, GL_RENDERBUFFER_WIDTH, 0x8D42) \
	CONST(int, GL_RENDERBUFFER_HEIGHT, 0x8D43) \
	CONST(int, GL_RENDERBUFFER_INTERNAL_FORMAT, 0x8D44) \
	CONST(int, GL_STENCIL_INDEX1, 0x8D46) \
	CONST(int, GL_STENCIL_INDEX4, 0x8D47) \
	CONST(int, GL_STENCIL_INDEX8, 0x8D48) \
	CONST(int, GL_STENCIL_INDEX16, 0x8D49) \
	CONST(int, GL_RENDERBUFFER_RED_SIZE, 0x8D50) \
	CONST(int, GL_RENDERBUFFER_GREEN_SIZE, 0x8D51) \
	CONST(int, GL_RENDERBUFFER_BLUE_SIZE, 0x8D52) \
	CONST(int, GL_RENDERBUFFER_ALPHA_SIZE, 0x8D53) \
	CONST(int, GL_RENDERBUFFER_DEPTH_SIZE, 0x8D54) \
	CONST(int, GL_RENDERBUFFER_STENCIL_SIZE, 0x8D55) \
	CONST(int, GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE, 0x8D56) \
	CONST(int, GL_MAX_SAMPLES, 0x8D57) \
	FUNC(GLboolean , glIsRenderbuffer, GLISRENDERBUFFER, (GLuint renderbuffer ), (renderbuffer)) \
	FUNC(void , glBindRenderbuffer, GLBINDRENDERBUFFER, (GLenum target , GLuint renderbuffer ), (target, renderbuffer)) \
	FUNC(void , glDeleteRenderbuffers, GLDELETERENDERBUFFERS, (GLsizei n , const GLuint * renderbuffers ), (n, renderbuffers)) \
	FUNC(void , glGenRenderbuffers, GLGENRENDERBUFFERS, (GLsizei n , GLuint * renderbuffers ), (n, renderbuffers)) \
	FUNC(void , glRenderbufferStorage, GLRENDERBUFFERSTORAGE, (GLenum target , GLenum internalformat , GLsizei width , GLsizei height ), (target, internalformat, width, height)) \
	FUNC(void , glGetRenderbufferParameteriv, GLGETRENDERBUFFERPARAMETERIV, (GLenum target , GLenum pname , GLint * params ), (target, pname, params)) \
	FUNC(GLboolean , glIsFramebuffer, GLISFRAMEBUFFER, (GLuint framebuffer ), (framebuffer)) \
	FUNC(void , glBindFramebuffer, GLBINDFRAMEBUFFER, (GLenum target , GLuint framebuffer ), (target, framebuffer)) \
	FUNC(void , glDeleteFramebuffers, GLDELETEFRAMEBUFFERS, (GLsizei n , const GLuint * framebuffers ), (n, framebuffers)) \
	FUNC(void , glGenFramebuffers, GLGENFRAMEBUFFERS, (GLsizei n , GLuint * framebuffers ), (n, framebuffers)) \
	FUNC(GLenum , glCheckFramebufferStatus, GLCHECKFRAMEBUFFERSTATUS, (GLenum target ), (target)) \
	FUNC(void , glFramebufferTexture1D, GLFRAMEBUFFERTEXTURE1D, (GLenum target , GLenum attachment , GLenum textarget , GLuint texture , GLint level ), (target, attachment, textarget, texture, level)) \
	FUNC(void , glFramebufferTexture2D, GLFRAMEBUFFERTEXTURE2D, (GLenum target , GLenum attachment , GLenum textarget , GLuint texture , GLint level ), (target, attachment, textarget, texture, level)) \
	FUNC(void , glFramebufferTexture3D, GLFRAMEBUFFERTEXTURE3D, (GLenum target , GLenum attachment , GLenum textarget , GLuint texture , GLint level , GLint zoffset ), (target, attachment, textarget, texture, level, zoffset)) \
	FUNC(void , glFramebufferRenderbuffer, GLFRAMEBUFFERRENDERBUFFER, (GLenum target , GLenum attachment , GLenum renderbuffertarget , GLuint renderbuffer ), (target, attachment, renderbuffertarget, renderbuffer)) \
	FUNC(void , glGetFramebufferAttachmentParameteriv, GLGETFRAMEBUFFERATTACHMENTPARAMETERIV, (GLenum target , GLenum attachment , GLenum pname , GLint * params ), (target, attachment, pname, params)) \
	FUNC(void , glGenerateMipmap, GLGENERATEMIPMAP, (GLenum target ), (target)) \
	FUNC(void , glBlitFramebuffer, GLBLITFRAMEBUFFER, (GLint srcX0 , GLint srcY0 , GLint srcX1 , GLint srcY1 , GLint dstX0 , GLint dstY0 , GLint dstX1 , GLint dstY1 , GLbitfield mask , GLenum filter ), (srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter)) \
	FUNC(void , glRenderbufferStorageMultisample, GLRENDERBUFFERSTORAGEMULTISAMPLE, (GLenum target , GLsizei samples , GLenum internalformat , GLsizei width , GLsizei height ), (target, samples, internalformat, width, height)) \
	FUNC(void , glFramebufferTextureLayer, GLFRAMEBUFFERTEXTURELAYER, (GLenum target , GLenum attachment , GLuint texture , GLint level , GLint layer ), (target, attachment, texture, level, layer)) \
	END()
#else
#define EXTENSION_GL_ARB_framebuffer_object(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_framebuffer_object_DEPRECATED
#define GL_ARB_framebuffer_object_DEPRECATED 1
#define EXTENSION_GL_ARB_framebuffer_object_DEPRECATED(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_framebuffer_object_DEPRECATED) \
	CONST(int, GL_INDEX, 0x8222) \
	CONST(int, GL_TEXTURE_LUMINANCE_TYPE, 0x8C14) \
	CONST(int, GL_TEXTURE_INTENSITY_TYPE, 0x8C15) \
	END()
#else
#define EXTENSION_GL_ARB_framebuffer_object_DEPRECATED(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_framebuffer_sRGB
#define GL_ARB_framebuffer_sRGB 1
#define EXTENSION_GL_ARB_framebuffer_sRGB(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_framebuffer_sRGB) \
	CONST(int, GL_FRAMEBUFFER_SRGB, 0x8DB9) \
	END()
#else
#define EXTENSION_GL_ARB_framebuffer_sRGB(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_geometry_shader4
#define GL_ARB_geometry_shader4 1
#define EXTENSION_GL_ARB_geometry_shader4(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_geometry_shader4) \
	CONST(int, GL_LINES_ADJACENCY_ARB, 0x000A) \
	CONST(int, GL_LINE_STRIP_ADJACENCY_ARB, 0x000B) \
	CONST(int, GL_TRIANGLES_ADJACENCY_ARB, 0x000C) \
	CONST(int, GL_TRIANGLE_STRIP_ADJACENCY_ARB, 0x000D) \
	CONST(int, GL_PROGRAM_POINT_SIZE_ARB, 0x8642) \
	CONST(int, GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB, 0x8C29) \
	CONST(int, GL_FRAMEBUFFER_ATTACHMENT_LAYERED_ARB, 0x8DA7) \
	CONST(int, GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB, 0x8DA8) \
	CONST(int, GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB, 0x8DA9) \
	CONST(int, GL_GEOMETRY_SHADER_ARB, 0x8DD9) \
	CONST(int, GL_GEOMETRY_VERTICES_OUT_ARB, 0x8DDA) \
	CONST(int, GL_GEOMETRY_INPUT_TYPE_ARB, 0x8DDB) \
	CONST(int, GL_GEOMETRY_OUTPUT_TYPE_ARB, 0x8DDC) \
	CONST(int, GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB, 0x8DDD) \
	CONST(int, GL_MAX_VERTEX_VARYING_COMPONENTS_ARB, 0x8DDE) \
	CONST(int, GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB, 0x8DDF) \
	CONST(int, GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB, 0x8DE0) \
	CONST(int, GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB, 0x8DE1) \
	FUNC(void , glProgramParameteriARB, GLPROGRAMPARAMETERIARB, (GLuint program , GLenum pname , GLint value ), (program, pname, value)) \
	FUNC(void , glFramebufferTextureARB, GLFRAMEBUFFERTEXTUREARB, (GLenum target , GLenum attachment , GLuint texture , GLint level ), (target, attachment, texture, level)) \
	FUNC(void , glFramebufferTextureLayerARB, GLFRAMEBUFFERTEXTURELAYERARB, (GLenum target , GLenum attachment , GLuint texture , GLint level , GLint layer ), (target, attachment, texture, level, layer)) \
	FUNC(void , glFramebufferTextureFaceARB, GLFRAMEBUFFERTEXTUREFACEARB, (GLenum target , GLenum attachment , GLuint texture , GLint level , GLenum face ), (target, attachment, texture, level, face)) \
	END()
#else
#define EXTENSION_GL_ARB_geometry_shader4(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_get_program_binary
#define GL_ARB_get_program_binary 1
#define EXTENSION_GL_ARB_get_program_binary(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_get_program_binary) \
	CONST(int, GL_PROGRAM_BINARY_RETRIEVABLE_HINT, 0x8257) \
	CONST(int, GL_PROGRAM_BINARY_LENGTH, 0x8741) \
	CONST(int, GL_NUM_PROGRAM_BINARY_FORMATS, 0x87FE) \
	CONST(int, GL_PROGRAM_BINARY_FORMATS, 0x87FF) \
	FUNC(void , glGetProgramBinary, GLGETPROGRAMBINARY, (GLuint program , GLsizei bufSize , GLsizei * length , GLenum * binaryFormat , GLvoid * binary ), (program, bufSize, length, binaryFormat, binary)) \
	FUNC(void , glProgramBinary, GLPROGRAMBINARY, (GLuint program , GLenum binaryFormat , const GLvoid * binary , GLsizei length ), (program, binaryFormat, binary, length)) \
	FUNC(void , glProgramParameteri, GLPROGRAMPARAMETERI, (GLuint program , GLenum pname , GLint value ), (program, pname, value)) \
	END()
#else
#define EXTENSION_GL_ARB_get_program_binary(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_gpu_shader5
#define GL_ARB_gpu_shader5 1
#define EXTENSION_GL_ARB_gpu_shader5(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_gpu_shader5) \
	CONST(int, GL_GEOMETRY_SHADER_INVOCATIONS, 0x887F) \
	CONST(int, GL_MAX_GEOMETRY_SHADER_INVOCATIONS, 0x8E5A) \
	CONST(int, GL_MIN_FRAGMENT_INTERPOLATION_OFFSET, 0x8E5B) \
	CONST(int, GL_MAX_FRAGMENT_INTERPOLATION_OFFSET, 0x8E5C) \
	CONST(int, GL_FRAGMENT_INTERPOLATION_OFFSET_BITS, 0x8E5D) \
	END()
#else
#define EXTENSION_GL_ARB_gpu_shader5(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_gpu_shader_fp64
#define GL_ARB_gpu_shader_fp64 1
#define EXTENSION_GL_ARB_gpu_shader_fp64(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_gpu_shader_fp64) \
	CONST(int, GL_DOUBLE_VEC2, 0x8FFC) \
	CONST(int, GL_DOUBLE_VEC3, 0x8FFD) \
	CONST(int, GL_DOUBLE_VEC4, 0x8FFE) \
	CONST(int, GL_DOUBLE_MAT2, 0x8F46) \
	CONST(int, GL_DOUBLE_MAT3, 0x8F47) \
	CONST(int, GL_DOUBLE_MAT4, 0x8F48) \
	CONST(int, GL_DOUBLE_MAT2x3, 0x8F49) \
	CONST(int, GL_DOUBLE_MAT2x4, 0x8F4A) \
	CONST(int, GL_DOUBLE_MAT3x2, 0x8F4B) \
	CONST(int, GL_DOUBLE_MAT3x4, 0x8F4C) \
	CONST(int, GL_DOUBLE_MAT4x2, 0x8F4D) \
	CONST(int, GL_DOUBLE_MAT4x3, 0x8F4E) \
	FUNC(void , glUniform1d, GLUNIFORM1D, (GLint location , GLdouble x ), (location, x)) \
	FUNC(void , glUniform2d, GLUNIFORM2D, (GLint location , GLdouble x , GLdouble y ), (location, x, y)) \
	FUNC(void , glUniform3d, GLUNIFORM3D, (GLint location , GLdouble x , GLdouble y , GLdouble z ), (location, x, y, z)) \
	FUNC(void , glUniform4d, GLUNIFORM4D, (GLint location , GLdouble x , GLdouble y , GLdouble z , GLdouble w ), (location, x, y, z, w)) \
	FUNC(void , glUniform1dv, GLUNIFORM1DV, (GLint location , GLsizei count , const GLdouble * value ), (location, count, value)) \
	FUNC(void , glUniform2dv, GLUNIFORM2DV, (GLint location , GLsizei count , const GLdouble * value ), (location, count, value)) \
	FUNC(void , glUniform3dv, GLUNIFORM3DV, (GLint location , GLsizei count , const GLdouble * value ), (location, count, value)) \
	FUNC(void , glUniform4dv, GLUNIFORM4DV, (GLint location , GLsizei count , const GLdouble * value ), (location, count, value)) \
	FUNC(void , glUniformMatrix2dv, GLUNIFORMMATRIX2DV, (GLint location , GLsizei count , GLboolean transpose , const GLdouble * value ), (location, count, transpose, value)) \
	FUNC(void , glUniformMatrix3dv, GLUNIFORMMATRIX3DV, (GLint location , GLsizei count , GLboolean transpose , const GLdouble * value ), (location, count, transpose, value)) \
	FUNC(void , glUniformMatrix4dv, GLUNIFORMMATRIX4DV, (GLint location , GLsizei count , GLboolean transpose , const GLdouble * value ), (location, count, transpose, value)) \
	FUNC(void , glUniformMatrix2x3dv, GLUNIFORMMATRIX2X3DV, (GLint location , GLsizei count , GLboolean transpose , const GLdouble * value ), (location, count, transpose, value)) \
	FUNC(void , glUniformMatrix2x4dv, GLUNIFORMMATRIX2X4DV, (GLint location , GLsizei count , GLboolean transpose , const GLdouble * value ), (location, count, transpose, value)) \
	FUNC(void , glUniformMatrix3x2dv, GLUNIFORMMATRIX3X2DV, (GLint location , GLsizei count , GLboolean transpose , const GLdouble * value ), (location, count, transpose, value)) \
	FUNC(void , glUniformMatrix3x4dv, GLUNIFORMMATRIX3X4DV, (GLint location , GLsizei count , GLboolean transpose , const GLdouble * value ), (location, count, transpose, value)) \
	FUNC(void , glUniformMatrix4x2dv, GLUNIFORMMATRIX4X2DV, (GLint location , GLsizei count , GLboolean transpose , const GLdouble * value ), (location, count, transpose, value)) \
	FUNC(void , glUniformMatrix4x3dv, GLUNIFORMMATRIX4X3DV, (GLint location , GLsizei count , GLboolean transpose , const GLdouble * value ), (location, count, transpose, value)) \
	FUNC(void , glGetUniformdv, GLGETUNIFORMDV, (GLuint program , GLint location , GLdouble * params ), (program, location, params)) \
	END()
#else
#define EXTENSION_GL_ARB_gpu_shader_fp64(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_half_float_pixel
#define GL_ARB_half_float_pixel 1
#define EXTENSION_GL_ARB_half_float_pixel(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_half_float_pixel) \
	CONST(int, GL_HALF_FLOAT_ARB, 0x140B) \
	END()
#else
#define EXTENSION_GL_ARB_half_float_pixel(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_half_float_vertex
#define GL_ARB_half_float_vertex 1
#define EXTENSION_GL_ARB_half_float_vertex(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_half_float_vertex) \
	CONST(int, GL_HALF_FLOAT, 0x140B) \
	END()
#else
#define EXTENSION_GL_ARB_half_float_vertex(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_imaging
#define GL_ARB_imaging 1
#define EXTENSION_GL_ARB_imaging(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_imaging) \
	CONST(int, GL_CONSTANT_COLOR, 0x8001) \
	CONST(int, GL_ONE_MINUS_CONSTANT_COLOR, 0x8002) \
	CONST(int, GL_CONSTANT_ALPHA, 0x8003) \
	CONST(int, GL_ONE_MINUS_CONSTANT_ALPHA, 0x8004) \
	CONST(int, GL_BLEND_COLOR, 0x8005) \
	CONST(int, GL_FUNC_ADD, 0x8006) \
	CONST(int, GL_MIN, 0x8007) \
	CONST(int, GL_MAX, 0x8008) \
	CONST(int, GL_BLEND_EQUATION, 0x8009) \
	CONST(int, GL_FUNC_SUBTRACT, 0x800A) \
	CONST(int, GL_FUNC_REVERSE_SUBTRACT, 0x800B) \
	END()
#else
#define EXTENSION_GL_ARB_imaging(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_imaging_DEPRECATED
#define GL_ARB_imaging_DEPRECATED 1
#define EXTENSION_GL_ARB_imaging_DEPRECATED(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_imaging_DEPRECATED) \
	CONST(int, GL_CONVOLUTION_1D, 0x8010) \
	CONST(int, GL_CONVOLUTION_2D, 0x8011) \
	CONST(int, GL_SEPARABLE_2D, 0x8012) \
	CONST(int, GL_CONVOLUTION_BORDER_MODE, 0x8013) \
	CONST(int, GL_CONVOLUTION_FILTER_SCALE, 0x8014) \
	CONST(int, GL_CONVOLUTION_FILTER_BIAS, 0x8015) \
	CONST(int, GL_REDUCE, 0x8016) \
	CONST(int, GL_CONVOLUTION_FORMAT, 0x8017) \
	CONST(int, GL_CONVOLUTION_WIDTH, 0x8018) \
	CONST(int, GL_CONVOLUTION_HEIGHT, 0x8019) \
	CONST(int, GL_MAX_CONVOLUTION_WIDTH, 0x801A) \
	CONST(int, GL_MAX_CONVOLUTION_HEIGHT, 0x801B) \
	CONST(int, GL_POST_CONVOLUTION_RED_SCALE, 0x801C) \
	CONST(int, GL_POST_CONVOLUTION_GREEN_SCALE, 0x801D) \
	CONST(int, GL_POST_CONVOLUTION_BLUE_SCALE, 0x801E) \
	CONST(int, GL_POST_CONVOLUTION_ALPHA_SCALE, 0x801F) \
	CONST(int, GL_POST_CONVOLUTION_RED_BIAS, 0x8020) \
	CONST(int, GL_POST_CONVOLUTION_GREEN_BIAS, 0x8021) \
	CONST(int, GL_POST_CONVOLUTION_BLUE_BIAS, 0x8022) \
	CONST(int, GL_POST_CONVOLUTION_ALPHA_BIAS, 0x8023) \
	CONST(int, GL_HISTOGRAM, 0x8024) \
	CONST(int, GL_PROXY_HISTOGRAM, 0x8025) \
	CONST(int, GL_HISTOGRAM_WIDTH, 0x8026) \
	CONST(int, GL_HISTOGRAM_FORMAT, 0x8027) \
	CONST(int, GL_HISTOGRAM_RED_SIZE, 0x8028) \
	CONST(int, GL_HISTOGRAM_GREEN_SIZE, 0x8029) \
	CONST(int, GL_HISTOGRAM_BLUE_SIZE, 0x802A) \
	CONST(int, GL_HISTOGRAM_ALPHA_SIZE, 0x802B) \
	CONST(int, GL_HISTOGRAM_LUMINANCE_SIZE, 0x802C) \
	CONST(int, GL_HISTOGRAM_SINK, 0x802D) \
	CONST(int, GL_MINMAX, 0x802E) \
	CONST(int, GL_MINMAX_FORMAT, 0x802F) \
	CONST(int, GL_MINMAX_SINK, 0x8030) \
	CONST(int, GL_TABLE_TOO_LARGE, 0x8031) \
	CONST(int, GL_COLOR_MATRIX, 0x80B1) \
	CONST(int, GL_COLOR_MATRIX_STACK_DEPTH, 0x80B2) \
	CONST(int, GL_MAX_COLOR_MATRIX_STACK_DEPTH, 0x80B3) \
	CONST(int, GL_POST_COLOR_MATRIX_RED_SCALE, 0x80B4) \
	CONST(int, GL_POST_COLOR_MATRIX_GREEN_SCALE, 0x80B5) \
	CONST(int, GL_POST_COLOR_MATRIX_BLUE_SCALE, 0x80B6) \
	CONST(int, GL_POST_COLOR_MATRIX_ALPHA_SCALE, 0x80B7) \
	CONST(int, GL_POST_COLOR_MATRIX_RED_BIAS, 0x80B8) \
	CONST(int, GL_POST_COLOR_MATRIX_GREEN_BIAS, 0x80B9) \
	CONST(int, GL_POST_COLOR_MATRIX_BLUE_BIAS, 0x80BA) \
	CONST(int, GL_POST_COLOR_MATRIX_ALPHA_BIAS, 0x80BB) \
	CONST(int, GL_COLOR_TABLE, 0x80D0) \
	CONST(int, GL_POST_CONVOLUTION_COLOR_TABLE, 0x80D1) \
	CONST(int, GL_POST_COLOR_MATRIX_COLOR_TABLE, 0x80D2) \
	CONST(int, GL_PROXY_COLOR_TABLE, 0x80D3) \
	CONST(int, GL_PROXY_POST_CONVOLUTION_COLOR_TABLE, 0x80D4) \
	CONST(int, GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE, 0x80D5) \
	CONST(int, GL_COLOR_TABLE_SCALE, 0x80D6) \
	CONST(int, GL_COLOR_TABLE_BIAS, 0x80D7) \
	CONST(int, GL_COLOR_TABLE_FORMAT, 0x80D8) \
	CONST(int, GL_COLOR_TABLE_WIDTH, 0x80D9) \
	CONST(int, GL_COLOR_TABLE_RED_SIZE, 0x80DA) \
	CONST(int, GL_COLOR_TABLE_GREEN_SIZE, 0x80DB) \
	CONST(int, GL_COLOR_TABLE_BLUE_SIZE, 0x80DC) \
	CONST(int, GL_COLOR_TABLE_ALPHA_SIZE, 0x80DD) \
	CONST(int, GL_COLOR_TABLE_LUMINANCE_SIZE, 0x80DE) \
	CONST(int, GL_COLOR_TABLE_INTENSITY_SIZE, 0x80DF) \
	CONST(int, GL_CONSTANT_BORDER, 0x8151) \
	CONST(int, GL_REPLICATE_BORDER, 0x8153) \
	CONST(int, GL_CONVOLUTION_BORDER_COLOR, 0x8154) \
	END()
#else
#define EXTENSION_GL_ARB_imaging_DEPRECATED(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_instanced_arrays
#define GL_ARB_instanced_arrays 1
#define EXTENSION_GL_ARB_instanced_arrays(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_instanced_arrays) \
	CONST(int, GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB, 0x88FE) \
	FUNC(void , glVertexAttribDivisorARB, GLVERTEXATTRIBDIVISORARB, (GLuint index , GLuint divisor ), (index, divisor)) \
	END()
#else
#define EXTENSION_GL_ARB_instanced_arrays(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_map_buffer_range
#define GL_ARB_map_buffer_range 1
#define EXTENSION_GL_ARB_map_buffer_range(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_map_buffer_range) \
	CONST(int, GL_MAP_READ_BIT, 0x0001) \
	CONST(int, GL_MAP_WRITE_BIT, 0x0002) \
	CONST(int, GL_MAP_INVALIDATE_RANGE_BIT, 0x0004) \
	CONST(int, GL_MAP_INVALIDATE_BUFFER_BIT, 0x0008) \
	CONST(int, GL_MAP_FLUSH_EXPLICIT_BIT, 0x0010) \
	CONST(int, GL_MAP_UNSYNCHRONIZED_BIT, 0x0020) \
	FUNC(GLvoid * , glMapBufferRange, GLMAPBUFFERRANGE, (GLenum target , GLintptr offset , GLsizeiptr length , GLbitfield access ), (target, offset, length, access)) \
	FUNC(void , glFlushMappedBufferRange, GLFLUSHMAPPEDBUFFERRANGE, (GLenum target , GLintptr offset , GLsizeiptr length ), (target, offset, length)) \
	END()
#else
#define EXTENSION_GL_ARB_map_buffer_range(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_matrix_palette
#define GL_ARB_matrix_palette 1
#define EXTENSION_GL_ARB_matrix_palette(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_matrix_palette) \
	CONST(int, GL_MATRIX_PALETTE_ARB, 0x8840) \
	CONST(int, GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB, 0x8841) \
	CONST(int, GL_MAX_PALETTE_MATRICES_ARB, 0x8842) \
	CONST(int, GL_CURRENT_PALETTE_MATRIX_ARB, 0x8843) \
	CONST(int, GL_MATRIX_INDEX_ARRAY_ARB, 0x8844) \
	CONST(int, GL_CURRENT_MATRIX_INDEX_ARB, 0x8845) \
	CONST(int, GL_MATRIX_INDEX_ARRAY_SIZE_ARB, 0x8846) \
	CONST(int, GL_MATRIX_INDEX_ARRAY_TYPE_ARB, 0x8847) \
	CONST(int, GL_MATRIX_INDEX_ARRAY_STRIDE_ARB, 0x8848) \
	CONST(int, GL_MATRIX_INDEX_ARRAY_POINTER_ARB, 0x8849) \
	FUNC(void , glCurrentPaletteMatrixARB, GLCURRENTPALETTEMATRIXARB, (GLint index ), (index)) \
	FUNC(void , glMatrixIndexubvARB, GLMATRIXINDEXUBVARB, (GLint size , const GLubyte * indices ), (size, indices)) \
	FUNC(void , glMatrixIndexusvARB, GLMATRIXINDEXUSVARB, (GLint size , const GLushort * indices ), (size, indices)) \
	FUNC(void , glMatrixIndexuivARB, GLMATRIXINDEXUIVARB, (GLint size , const GLuint * indices ), (size, indices)) \
	FUNC(void , glMatrixIndexPointerARB, GLMATRIXINDEXPOINTERARB, (GLint size , GLenum type , GLsizei stride , const GLvoid * pointer ), (size, type, stride, pointer)) \
	END()
#else
#define EXTENSION_GL_ARB_matrix_palette(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_multisample
#define GL_ARB_multisample 1
#define EXTENSION_GL_ARB_multisample(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_multisample) \
	CONST(int, GL_MULTISAMPLE_ARB, 0x809D) \
	CONST(int, GL_SAMPLE_ALPHA_TO_COVERAGE_ARB, 0x809E) \
	CONST(int, GL_SAMPLE_ALPHA_TO_ONE_ARB, 0x809F) \
	CONST(int, GL_SAMPLE_COVERAGE_ARB, 0x80A0) \
	CONST(int, GL_SAMPLE_BUFFERS_ARB, 0x80A8) \
	CONST(int, GL_SAMPLES_ARB, 0x80A9) \
	CONST(int, GL_SAMPLE_COVERAGE_VALUE_ARB, 0x80AA) \
	CONST(int, GL_SAMPLE_COVERAGE_INVERT_ARB, 0x80AB) \
	CONST(int, GL_MULTISAMPLE_BIT_ARB, 0x20000000) \
	FUNC(void , glSampleCoverageARB, GLSAMPLECOVERAGEARB, (GLclampf value , GLboolean invert ), (value, invert)) \
	END()
#else
#define EXTENSION_GL_ARB_multisample(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_multitexture
#define GL_ARB_multitexture 1
#define EXTENSION_GL_ARB_multitexture(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_multitexture) \
	CONST(int, GL_TEXTURE0_ARB, 0x84C0) \
	CONST(int, GL_TEXTURE1_ARB, 0x84C1) \
	CONST(int, GL_TEXTURE2_ARB, 0x84C2) \
	CONST(int, GL_TEXTURE3_ARB, 0x84C3) \
	CONST(int, GL_TEXTURE4_ARB, 0x84C4) \
	CONST(int, GL_TEXTURE5_ARB, 0x84C5) \
	CONST(int, GL_TEXTURE6_ARB, 0x84C6) \
	CONST(int, GL_TEXTURE7_ARB, 0x84C7) \
	CONST(int, GL_TEXTURE8_ARB, 0x84C8) \
	CONST(int, GL_TEXTURE9_ARB, 0x84C9) \
	CONST(int, GL_TEXTURE10_ARB, 0x84CA) \
	CONST(int, GL_TEXTURE11_ARB, 0x84CB) \
	CONST(int, GL_TEXTURE12_ARB, 0x84CC) \
	CONST(int, GL_TEXTURE13_ARB, 0x84CD) \
	CONST(int, GL_TEXTURE14_ARB, 0x84CE) \
	CONST(int, GL_TEXTURE15_ARB, 0x84CF) \
	CONST(int, GL_TEXTURE16_ARB, 0x84D0) \
	CONST(int, GL_TEXTURE17_ARB, 0x84D1) \
	CONST(int, GL_TEXTURE18_ARB, 0x84D2) \
	CONST(int, GL_TEXTURE19_ARB, 0x84D3) \
	CONST(int, GL_TEXTURE20_ARB, 0x84D4) \
	CONST(int, GL_TEXTURE21_ARB, 0x84D5) \
	CONST(int, GL_TEXTURE22_ARB, 0x84D6) \
	CONST(int, GL_TEXTURE23_ARB, 0x84D7) \
	CONST(int, GL_TEXTURE24_ARB, 0x84D8) \
	CONST(int, GL_TEXTURE25_ARB, 0x84D9) \
	CONST(int, GL_TEXTURE26_ARB, 0x84DA) \
	CONST(int, GL_TEXTURE27_ARB, 0x84DB) \
	CONST(int, GL_TEXTURE28_ARB, 0x84DC) \
	CONST(int, GL_TEXTURE29_ARB, 0x84DD) \
	CONST(int, GL_TEXTURE30_ARB, 0x84DE) \
	CONST(int, GL_TEXTURE31_ARB, 0x84DF) \
	CONST(int, GL_ACTIVE_TEXTURE_ARB, 0x84E0) \
	CONST(int, GL_CLIENT_ACTIVE_TEXTURE_ARB, 0x84E1) \
	CONST(int, GL_MAX_TEXTURE_UNITS_ARB, 0x84E2) \
	FUNC(void , glActiveTextureARB, GLACTIVETEXTUREARB, (GLenum texture ), (texture)) \
	FUNC(void , glClientActiveTextureARB, GLCLIENTACTIVETEXTUREARB, (GLenum texture ), (texture)) \
	FUNC(void , glMultiTexCoord1dARB, GLMULTITEXCOORD1DARB, (GLenum target , GLdouble s ), (target, s)) \
	FUNC(void , glMultiTexCoord1dvARB, GLMULTITEXCOORD1DVARB, (GLenum target , const GLdouble * v ), (target, v)) \
	FUNC(void , glMultiTexCoord1fARB, GLMULTITEXCOORD1FARB, (GLenum target , GLfloat s ), (target, s)) \
	FUNC(void , glMultiTexCoord1fvARB, GLMULTITEXCOORD1FVARB, (GLenum target , const GLfloat * v ), (target, v)) \
	FUNC(void , glMultiTexCoord1iARB, GLMULTITEXCOORD1IARB, (GLenum target , GLint s ), (target, s)) \
	FUNC(void , glMultiTexCoord1ivARB, GLMULTITEXCOORD1IVARB, (GLenum target , const GLint * v ), (target, v)) \
	FUNC(void , glMultiTexCoord1sARB, GLMULTITEXCOORD1SARB, (GLenum target , GLshort s ), (target, s)) \
	FUNC(void , glMultiTexCoord1svARB, GLMULTITEXCOORD1SVARB, (GLenum target , const GLshort * v ), (target, v)) \
	FUNC(void , glMultiTexCoord2dARB, GLMULTITEXCOORD2DARB, (GLenum target , GLdouble s , GLdouble t ), (target, s, t)) \
	FUNC(void , glMultiTexCoord2dvARB, GLMULTITEXCOORD2DVARB, (GLenum target , const GLdouble * v ), (target, v)) \
	FUNC(void , glMultiTexCoord2fARB, GLMULTITEXCOORD2FARB, (GLenum target , GLfloat s , GLfloat t ), (target, s, t)) \
	FUNC(void , glMultiTexCoord2fvARB, GLMULTITEXCOORD2FVARB, (GLenum target , const GLfloat * v ), (target, v)) \
	FUNC(void , glMultiTexCoord2iARB, GLMULTITEXCOORD2IARB, (GLenum target , GLint s , GLint t ), (target, s, t)) \
	FUNC(void , glMultiTexCoord2ivARB, GLMULTITEXCOORD2IVARB, (GLenum target , const GLint * v ), (target, v)) \
	FUNC(void , glMultiTexCoord2sARB, GLMULTITEXCOORD2SARB, (GLenum target , GLshort s , GLshort t ), (target, s, t)) \
	FUNC(void , glMultiTexCoord2svARB, GLMULTITEXCOORD2SVARB, (GLenum target , const GLshort * v ), (target, v)) \
	FUNC(void , glMultiTexCoord3dARB, GLMULTITEXCOORD3DARB, (GLenum target , GLdouble s , GLdouble t , GLdouble r ), (target, s, t, r)) \
	FUNC(void , glMultiTexCoord3dvARB, GLMULTITEXCOORD3DVARB, (GLenum target , const GLdouble * v ), (target, v)) \
	FUNC(void , glMultiTexCoord3fARB, GLMULTITEXCOORD3FARB, (GLenum target , GLfloat s , GLfloat t , GLfloat r ), (target, s, t, r)) \
	FUNC(void , glMultiTexCoord3fvARB, GLMULTITEXCOORD3FVARB, (GLenum target , const GLfloat * v ), (target, v)) \
	FUNC(void , glMultiTexCoord3iARB, GLMULTITEXCOORD3IARB, (GLenum target , GLint s , GLint t , GLint r ), (target, s, t, r)) \
	FUNC(void , glMultiTexCoord3ivARB, GLMULTITEXCOORD3IVARB, (GLenum target , const GLint * v ), (target, v)) \
	FUNC(void , glMultiTexCoord3sARB, GLMULTITEXCOORD3SARB, (GLenum target , GLshort s , GLshort t , GLshort r ), (target, s, t, r)) \
	FUNC(void , glMultiTexCoord3svARB, GLMULTITEXCOORD3SVARB, (GLenum target , const GLshort * v ), (target, v)) \
	FUNC(void , glMultiTexCoord4dARB, GLMULTITEXCOORD4DARB, (GLenum target , GLdouble s , GLdouble t , GLdouble r , GLdouble q ), (target, s, t, r, q)) \
	FUNC(void , glMultiTexCoord4dvARB, GLMULTITEXCOORD4DVARB, (GLenum target , const GLdouble * v ), (target, v)) \
	FUNC(void , glMultiTexCoord4fARB, GLMULTITEXCOORD4FARB, (GLenum target , GLfloat s , GLfloat t , GLfloat r , GLfloat q ), (target, s, t, r, q)) \
	FUNC(void , glMultiTexCoord4fvARB, GLMULTITEXCOORD4FVARB, (GLenum target , const GLfloat * v ), (target, v)) \
	FUNC(void , glMultiTexCoord4iARB, GLMULTITEXCOORD4IARB, (GLenum target , GLint s , GLint t , GLint r , GLint q ), (target, s, t, r, q)) \
	FUNC(void , glMultiTexCoord4ivARB, GLMULTITEXCOORD4IVARB, (GLenum target , const GLint * v ), (target, v)) \
	FUNC(void , glMultiTexCoord4sARB, GLMULTITEXCOORD4SARB, (GLenum target , GLshort s , GLshort t , GLshort r , GLshort q ), (target, s, t, r, q)) \
	FUNC(void , glMultiTexCoord4svARB, GLMULTITEXCOORD4SVARB, (GLenum target , const GLshort * v ), (target, v)) \
	END()
#else
#define EXTENSION_GL_ARB_multitexture(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_occlusion_query
#define GL_ARB_occlusion_query 1
#define EXTENSION_GL_ARB_occlusion_query(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_occlusion_query) \
	CONST(int, GL_QUERY_COUNTER_BITS_ARB, 0x8864) \
	CONST(int, GL_CURRENT_QUERY_ARB, 0x8865) \
	CONST(int, GL_QUERY_RESULT_ARB, 0x8866) \
	CONST(int, GL_QUERY_RESULT_AVAILABLE_ARB, 0x8867) \
	CONST(int, GL_SAMPLES_PASSED_ARB, 0x8914) \
	FUNC(void , glGenQueriesARB, GLGENQUERIESARB, (GLsizei n , GLuint * ids ), (n, ids)) \
	FUNC(void , glDeleteQueriesARB, GLDELETEQUERIESARB, (GLsizei n , const GLuint * ids ), (n, ids)) \
	FUNC(GLboolean , glIsQueryARB, GLISQUERYARB, (GLuint id ), (id)) \
	FUNC(void , glBeginQueryARB, GLBEGINQUERYARB, (GLenum target , GLuint id ), (target, id)) \
	FUNC(void , glEndQueryARB, GLENDQUERYARB, (GLenum target ), (target)) \
	FUNC(void , glGetQueryivARB, GLGETQUERYIVARB, (GLenum target , GLenum pname , GLint * params ), (target, pname, params)) \
	FUNC(void , glGetQueryObjectivARB, GLGETQUERYOBJECTIVARB, (GLuint id , GLenum pname , GLint * params ), (id, pname, params)) \
	FUNC(void , glGetQueryObjectuivARB, GLGETQUERYOBJECTUIVARB, (GLuint id , GLenum pname , GLuint * params ), (id, pname, params)) \
	END()
#else
#define EXTENSION_GL_ARB_occlusion_query(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_occlusion_query2
#define GL_ARB_occlusion_query2 1
#define EXTENSION_GL_ARB_occlusion_query2(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_occlusion_query2) \
	CONST(int, GL_ANY_SAMPLES_PASSED, 0x8C2F) \
	END()
#else
#define EXTENSION_GL_ARB_occlusion_query2(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_pixel_buffer_object
#define GL_ARB_pixel_buffer_object 1
#define EXTENSION_GL_ARB_pixel_buffer_object(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_pixel_buffer_object) \
	CONST(int, GL_PIXEL_PACK_BUFFER_ARB, 0x88EB) \
	CONST(int, GL_PIXEL_UNPACK_BUFFER_ARB, 0x88EC) \
	CONST(int, GL_PIXEL_PACK_BUFFER_BINDING_ARB, 0x88ED) \
	CONST(int, GL_PIXEL_UNPACK_BUFFER_BINDING_ARB, 0x88EF) \
	END()
#else
#define EXTENSION_GL_ARB_pixel_buffer_object(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_point_parameters
#define GL_ARB_point_parameters 1
#define EXTENSION_GL_ARB_point_parameters(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_point_parameters) \
	CONST(int, GL_POINT_SIZE_MIN_ARB, 0x8126) \
	CONST(int, GL_POINT_SIZE_MAX_ARB, 0x8127) \
	CONST(int, GL_POINT_FADE_THRESHOLD_SIZE_ARB, 0x8128) \
	CONST(int, GL_POINT_DISTANCE_ATTENUATION_ARB, 0x8129) \
	FUNC(void , glPointParameterfARB, GLPOINTPARAMETERFARB, (GLenum pname , GLfloat param ), (pname, param)) \
	FUNC(void , glPointParameterfvARB, GLPOINTPARAMETERFVARB, (GLenum pname , const GLfloat * params ), (pname, params)) \
	END()
#else
#define EXTENSION_GL_ARB_point_parameters(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_point_sprite
#define GL_ARB_point_sprite 1
#define EXTENSION_GL_ARB_point_sprite(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_point_sprite) \
	CONST(int, GL_POINT_SPRITE_ARB, 0x8861) \
	CONST(int, GL_COORD_REPLACE_ARB, 0x8862) \
	END()
#else
#define EXTENSION_GL_ARB_point_sprite(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_provoking_vertex
#define GL_ARB_provoking_vertex 1
#define EXTENSION_GL_ARB_provoking_vertex(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_provoking_vertex) \
	CONST(int, GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION, 0x8E4C) \
	CONST(int, GL_FIRST_VERTEX_CONVENTION, 0x8E4D) \
	CONST(int, GL_LAST_VERTEX_CONVENTION, 0x8E4E) \
	CONST(int, GL_PROVOKING_VERTEX, 0x8E4F) \
	FUNC(void , glProvokingVertex, GLPROVOKINGVERTEX, (GLenum mode ), (mode)) \
	END()
#else
#define EXTENSION_GL_ARB_provoking_vertex(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_robustness
#define GL_ARB_robustness 1
#define EXTENSION_GL_ARB_robustness(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_robustness) \
	CONST(int, GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB, 0x00000004) \
	CONST(int, GL_LOSE_CONTEXT_ON_RESET_ARB, 0x8252) \
	CONST(int, GL_GUILTY_CONTEXT_RESET_ARB, 0x8253) \
	CONST(int, GL_INNOCENT_CONTEXT_RESET_ARB, 0x8254) \
	CONST(int, GL_UNKNOWN_CONTEXT_RESET_ARB, 0x8255) \
	CONST(int, GL_RESET_NOTIFICATION_STRATEGY_ARB, 0x8256) \
	CONST(int, GL_NO_RESET_NOTIFICATION_ARB, 0x8261) \
	FUNC(GLenum , glGetGraphicsResetStatusARB, GLGETGRAPHICSRESETSTATUSARB, (void ), ()) \
	FUNC(void , glGetnMapdvARB, GLGETNMAPDVARB, (GLenum target , GLenum query , GLsizei bufSize , GLdouble * v ), (target, query, bufSize, v)) \
	FUNC(void , glGetnMapfvARB, GLGETNMAPFVARB, (GLenum target , GLenum query , GLsizei bufSize , GLfloat * v ), (target, query, bufSize, v)) \
	FUNC(void , glGetnMapivARB, GLGETNMAPIVARB, (GLenum target , GLenum query , GLsizei bufSize , GLint * v ), (target, query, bufSize, v)) \
	FUNC(void , glGetnPixelMapfvARB, GLGETNPIXELMAPFVARB, (GLenum map , GLsizei bufSize , GLfloat * values ), (map, bufSize, values)) \
	FUNC(void , glGetnPixelMapuivARB, GLGETNPIXELMAPUIVARB, (GLenum map , GLsizei bufSize , GLuint * values ), (map, bufSize, values)) \
	FUNC(void , glGetnPixelMapusvARB, GLGETNPIXELMAPUSVARB, (GLenum map , GLsizei bufSize , GLushort * values ), (map, bufSize, values)) \
	FUNC(void , glGetnPolygonStippleARB, GLGETNPOLYGONSTIPPLEARB, (GLsizei bufSize , GLubyte * pattern ), (bufSize, pattern)) \
	FUNC(void , glGetnColorTableARB, GLGETNCOLORTABLEARB, (GLenum target , GLenum format , GLenum type , GLsizei bufSize , GLvoid * table ), (target, format, type, bufSize, table)) \
	FUNC(void , glGetnConvolutionFilterARB, GLGETNCONVOLUTIONFILTERARB, (GLenum target , GLenum format , GLenum type , GLsizei bufSize , GLvoid * image ), (target, format, type, bufSize, image)) \
	FUNC(void , glGetnSeparableFilterARB, GLGETNSEPARABLEFILTERARB, (GLenum target , GLenum format , GLenum type , GLsizei rowBufSize , GLvoid * row , GLsizei columnBufSize , GLvoid * column , GLvoid * span ), (target, format, type, rowBufSize, row, columnBufSize, column, span)) \
	FUNC(void , glGetnHistogramARB, GLGETNHISTOGRAMARB, (GLenum target , GLboolean reset , GLenum format , GLenum type , GLsizei bufSize , GLvoid * values ), (target, reset, format, type, bufSize, values)) \
	FUNC(void , glGetnMinmaxARB, GLGETNMINMAXARB, (GLenum target , GLboolean reset , GLenum format , GLenum type , GLsizei bufSize , GLvoid * values ), (target, reset, format, type, bufSize, values)) \
	FUNC(void , glGetnTexImageARB, GLGETNTEXIMAGEARB, (GLenum target , GLint level , GLenum format , GLenum type , GLsizei bufSize , GLvoid * img ), (target, level, format, type, bufSize, img)) \
	FUNC(void , glReadnPixelsARB, GLREADNPIXELSARB, (GLint x , GLint y , GLsizei width , GLsizei height , GLenum format , GLenum type , GLsizei bufSize , GLvoid * data ), (x, y, width, height, format, type, bufSize, data)) \
	FUNC(void , glGetnCompressedTexImageARB, GLGETNCOMPRESSEDTEXIMAGEARB, (GLenum target , GLint lod , GLsizei bufSize , GLvoid * img ), (target, lod, bufSize, img)) \
	FUNC(void , glGetnUniformfvARB, GLGETNUNIFORMFVARB, (GLuint program , GLint location , GLsizei bufSize , GLfloat * params ), (program, location, bufSize, params)) \
	FUNC(void , glGetnUniformivARB, GLGETNUNIFORMIVARB, (GLuint program , GLint location , GLsizei bufSize , GLint * params ), (program, location, bufSize, params)) \
	FUNC(void , glGetnUniformuivARB, GLGETNUNIFORMUIVARB, (GLuint program , GLint location , GLsizei bufSize , GLuint * params ), (program, location, bufSize, params)) \
	FUNC(void , glGetnUniformdvARB, GLGETNUNIFORMDVARB, (GLuint program , GLint location , GLsizei bufSize , GLdouble * params ), (program, location, bufSize, params)) \
	END()
#else
#define EXTENSION_GL_ARB_robustness(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_sample_shading
#define GL_ARB_sample_shading 1
#define EXTENSION_GL_ARB_sample_shading(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_sample_shading) \
	CONST(int, GL_SAMPLE_SHADING_ARB, 0x8C36) \
	CONST(int, GL_MIN_SAMPLE_SHADING_VALUE_ARB, 0x8C37) \
	FUNC(void , glMinSampleShadingARB, GLMINSAMPLESHADINGARB, (GLclampf value ), (value)) \
	END()
#else
#define EXTENSION_GL_ARB_sample_shading(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_sampler_objects
#define GL_ARB_sampler_objects 1
#define EXTENSION_GL_ARB_sampler_objects(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_sampler_objects) \
	CONST(int, GL_SAMPLER_BINDING, 0x8919) \
	FUNC(void , glGenSamplers, GLGENSAMPLERS, (GLsizei count , GLuint * samplers ), (count, samplers)) \
	FUNC(void , glDeleteSamplers, GLDELETESAMPLERS, (GLsizei count , const GLuint * samplers ), (count, samplers)) \
	FUNC(GLboolean , glIsSampler, GLISSAMPLER, (GLuint sampler ), (sampler)) \
	FUNC(void , glBindSampler, GLBINDSAMPLER, (GLuint unit , GLuint sampler ), (unit, sampler)) \
	FUNC(void , glSamplerParameteri, GLSAMPLERPARAMETERI, (GLuint sampler , GLenum pname , GLint param ), (sampler, pname, param)) \
	FUNC(void , glSamplerParameteriv, GLSAMPLERPARAMETERIV, (GLuint sampler , GLenum pname , const GLint * param ), (sampler, pname, param)) \
	FUNC(void , glSamplerParameterf, GLSAMPLERPARAMETERF, (GLuint sampler , GLenum pname , GLfloat param ), (sampler, pname, param)) \
	FUNC(void , glSamplerParameterfv, GLSAMPLERPARAMETERFV, (GLuint sampler , GLenum pname , const GLfloat * param ), (sampler, pname, param)) \
	FUNC(void , glSamplerParameterIiv, GLSAMPLERPARAMETERIIV, (GLuint sampler , GLenum pname , const GLint * param ), (sampler, pname, param)) \
	FUNC(void , glSamplerParameterIuiv, GLSAMPLERPARAMETERIUIV, (GLuint sampler , GLenum pname , const GLuint * param ), (sampler, pname, param)) \
	FUNC(void , glGetSamplerParameteriv, GLGETSAMPLERPARAMETERIV, (GLuint sampler , GLenum pname , GLint * params ), (sampler, pname, params)) \
	FUNC(void , glGetSamplerParameterIiv, GLGETSAMPLERPARAMETERIIV, (GLuint sampler , GLenum pname , GLint * params ), (sampler, pname, params)) \
	FUNC(void , glGetSamplerParameterfv, GLGETSAMPLERPARAMETERFV, (GLuint sampler , GLenum pname , GLfloat * params ), (sampler, pname, params)) \
	FUNC(void , glGetSamplerParameterIuiv, GLGETSAMPLERPARAMETERIUIV, (GLuint sampler , GLenum pname , GLuint * params ), (sampler, pname, params)) \
	END()
#else
#define EXTENSION_GL_ARB_sampler_objects(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_seamless_cube_map
#define GL_ARB_seamless_cube_map 1
#define EXTENSION_GL_ARB_seamless_cube_map(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_seamless_cube_map) \
	CONST(int, GL_TEXTURE_CUBE_MAP_SEAMLESS, 0x884F) \
	END()
#else
#define EXTENSION_GL_ARB_seamless_cube_map(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_separate_shader_objects
#define GL_ARB_separate_shader_objects 1
#define EXTENSION_GL_ARB_separate_shader_objects(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_separate_shader_objects) \
	CONST(int, GL_VERTEX_SHADER_BIT, 0x00000001) \
	CONST(int, GL_FRAGMENT_SHADER_BIT, 0x00000002) \
	CONST(int, GL_GEOMETRY_SHADER_BIT, 0x00000004) \
	CONST(int, GL_TESS_CONTROL_SHADER_BIT, 0x00000008) \
	CONST(int, GL_TESS_EVALUATION_SHADER_BIT, 0x00000010) \
	CONST(int, GL_ALL_SHADER_BITS, 0xFFFFFFFF) \
	CONST(int, GL_PROGRAM_SEPARABLE, 0x8258) \
	CONST(int, GL_ACTIVE_PROGRAM, 0x8259) \
	CONST(int, GL_PROGRAM_PIPELINE_BINDING, 0x825A) \
	FUNC(void , glUseProgramStages, GLUSEPROGRAMSTAGES, (GLuint pipeline , GLbitfield stages , GLuint program ), (pipeline, stages, program)) \
	FUNC(void , glActiveShaderProgram, GLACTIVESHADERPROGRAM, (GLuint pipeline , GLuint program ), (pipeline, program)) \
	FUNC(GLuint , glCreateShaderProgramv, GLCREATESHADERPROGRAMV, (GLenum type , GLsizei count , const GLchar * * strings ), (type, count, strings)) \
	FUNC(void , glBindProgramPipeline, GLBINDPROGRAMPIPELINE, (GLuint pipeline ), (pipeline)) \
	FUNC(void , glDeleteProgramPipelines, GLDELETEPROGRAMPIPELINES, (GLsizei n , const GLuint * pipelines ), (n, pipelines)) \
	FUNC(void , glGenProgramPipelines, GLGENPROGRAMPIPELINES, (GLsizei n , GLuint * pipelines ), (n, pipelines)) \
	FUNC(GLboolean , glIsProgramPipeline, GLISPROGRAMPIPELINE, (GLuint pipeline ), (pipeline)) \
	FUNC(void , glGetProgramPipelineiv, GLGETPROGRAMPIPELINEIV, (GLuint pipeline , GLenum pname , GLint * params ), (pipeline, pname, params)) \
	FUNC(void , glProgramUniform1i, GLPROGRAMUNIFORM1I, (GLuint program , GLint location , GLint v0 ), (program, location, v0)) \
	FUNC(void , glProgramUniform1iv, GLPROGRAMUNIFORM1IV, (GLuint program , GLint location , GLsizei count , const GLint * value ), (program, location, count, value)) \
	FUNC(void , glProgramUniform1f, GLPROGRAMUNIFORM1F, (GLuint program , GLint location , GLfloat v0 ), (program, location, v0)) \
	FUNC(void , glProgramUniform1fv, GLPROGRAMUNIFORM1FV, (GLuint program , GLint location , GLsizei count , const GLfloat * value ), (program, location, count, value)) \
	FUNC(void , glProgramUniform1d, GLPROGRAMUNIFORM1D, (GLuint program , GLint location , GLdouble v0 ), (program, location, v0)) \
	FUNC(void , glProgramUniform1dv, GLPROGRAMUNIFORM1DV, (GLuint program , GLint location , GLsizei count , const GLdouble * value ), (program, location, count, value)) \
	FUNC(void , glProgramUniform1ui, GLPROGRAMUNIFORM1UI, (GLuint program , GLint location , GLuint v0 ), (program, location, v0)) \
	FUNC(void , glProgramUniform1uiv, GLPROGRAMUNIFORM1UIV, (GLuint program , GLint location , GLsizei count , const GLuint * value ), (program, location, count, value)) \
	FUNC(void , glProgramUniform2i, GLPROGRAMUNIFORM2I, (GLuint program , GLint location , GLint v0 , GLint v1 ), (program, location, v0, v1)) \
	FUNC(void , glProgramUniform2iv, GLPROGRAMUNIFORM2IV, (GLuint program , GLint location , GLsizei count , const GLint * value ), (program, location, count, value)) \
	FUNC(void , glProgramUniform2f, GLPROGRAMUNIFORM2F, (GLuint program , GLint location , GLfloat v0 , GLfloat v1 ), (program, location, v0, v1)) \
	FUNC(void , glProgramUniform2fv, GLPROGRAMUNIFORM2FV, (GLuint program , GLint location , GLsizei count , const GLfloat * value ), (program, location, count, value)) \
	FUNC(void , glProgramUniform2d, GLPROGRAMUNIFORM2D, (GLuint program , GLint location , GLdouble v0 , GLdouble v1 ), (program, location, v0, v1)) \
	FUNC(void , glProgramUniform2dv, GLPROGRAMUNIFORM2DV, (GLuint program , GLint location , GLsizei count , const GLdouble * value ), (program, location, count, value)) \
	FUNC(void , glProgramUniform2ui, GLPROGRAMUNIFORM2UI, (GLuint program , GLint location , GLuint v0 , GLuint v1 ), (program, location, v0, v1)) \
	FUNC(void , glProgramUniform2uiv, GLPROGRAMUNIFORM2UIV, (GLuint program , GLint location , GLsizei count , const GLuint * value ), (program, location, count, value)) \
	FUNC(void , glProgramUniform3i, GLPROGRAMUNIFORM3I, (GLuint program , GLint location , GLint v0 , GLint v1 , GLint v2 ), (program, location, v0, v1, v2)) \
	FUNC(void , glProgramUniform3iv, GLPROGRAMUNIFORM3IV, (GLuint program , GLint location , GLsizei count , const GLint * value ), (program, location, count, value)) \
	FUNC(void , glProgramUniform3f, GLPROGRAMUNIFORM3F, (GLuint program , GLint location , GLfloat v0 , GLfloat v1 , GLfloat v2 ), (program, location, v0, v1, v2)) \
	FUNC(void , glProgramUniform3fv, GLPROGRAMUNIFORM3FV, (GLuint program , GLint location , GLsizei count , const GLfloat * value ), (program, location, count, value)) \
	FUNC(void , glProgramUniform3d, GLPROGRAMUNIFORM3D, (GLuint program , GLint location , GLdouble v0 , GLdouble v1 , GLdouble v2 ), (program, location, v0, v1, v2)) \
	FUNC(void , glProgramUniform3dv, GLPROGRAMUNIFORM3DV, (GLuint program , GLint location , GLsizei count , const GLdouble * value ), (program, location, count, value)) \
	FUNC(void , glProgramUniform3ui, GLPROGRAMUNIFORM3UI, (GLuint program , GLint location , GLuint v0 , GLuint v1 , GLuint v2 ), (program, location, v0, v1, v2)) \
	FUNC(void , glProgramUniform3uiv, GLPROGRAMUNIFORM3UIV, (GLuint program , GLint location , GLsizei count , const GLuint * value ), (program, location, count, value)) \
	FUNC(void , glProgramUniform4i, GLPROGRAMUNIFORM4I, (GLuint program , GLint location , GLint v0 , GLint v1 , GLint v2 , GLint v3 ), (program, location, v0, v1, v2, v3)) \
	FUNC(void , glProgramUniform4iv, GLPROGRAMUNIFORM4IV, (GLuint program , GLint location , GLsizei count , const GLint * value ), (program, location, count, value)) \
	FUNC(void , glProgramUniform4f, GLPROGRAMUNIFORM4F, (GLuint program , GLint location , GLfloat v0 , GLfloat v1 , GLfloat v2 , GLfloat v3 ), (program, location, v0, v1, v2, v3)) \
	FUNC(void , glProgramUniform4fv, GLPROGRAMUNIFORM4FV, (GLuint program , GLint location , GLsizei count , const GLfloat * value ), (program, location, count, value)) \
	FUNC(void , glProgramUniform4d, GLPROGRAMUNIFORM4D, (GLuint program , GLint location , GLdouble v0 , GLdouble v1 , GLdouble v2 , GLdouble v3 ), (program, location, v0, v1, v2, v3)) \
	FUNC(void , glProgramUniform4dv, GLPROGRAMUNIFORM4DV, (GLuint program , GLint location , GLsizei count , const GLdouble * value ), (program, location, count, value)) \
	FUNC(void , glProgramUniform4ui, GLPROGRAMUNIFORM4UI, (GLuint program , GLint location , GLuint v0 , GLuint v1 , GLuint v2 , GLuint v3 ), (program, location, v0, v1, v2, v3)) \
	FUNC(void , glProgramUniform4uiv, GLPROGRAMUNIFORM4UIV, (GLuint program , GLint location , GLsizei count , const GLuint * value ), (program, location, count, value)) \
	FUNC(void , glProgramUniformMatrix2fv, GLPROGRAMUNIFORMMATRIX2FV, (GLuint program , GLint location , GLsizei count , GLboolean transpose , const GLfloat * value ), (program, location, count, transpose, value)) \
	FUNC(void , glProgramUniformMatrix3fv, GLPROGRAMUNIFORMMATRIX3FV, (GLuint program , GLint location , GLsizei count , GLboolean transpose , const GLfloat * value ), (program, location, count, transpose, value)) \
	FUNC(void , glProgramUniformMatrix4fv, GLPROGRAMUNIFORMMATRIX4FV, (GLuint program , GLint location , GLsizei count , GLboolean transpose , const GLfloat * value ), (program, location, count, transpose, value)) \
	FUNC(void , glProgramUniformMatrix2dv, GLPROGRAMUNIFORMMATRIX2DV, (GLuint program , GLint location , GLsizei count , GLboolean transpose , const GLdouble * value ), (program, location, count, transpose, value)) \
	FUNC(void , glProgramUniformMatrix3dv, GLPROGRAMUNIFORMMATRIX3DV, (GLuint program , GLint location , GLsizei count , GLboolean transpose , const GLdouble * value ), (program, location, count, transpose, value)) \
	FUNC(void , glProgramUniformMatrix4dv, GLPROGRAMUNIFORMMATRIX4DV, (GLuint program , GLint location , GLsizei count , GLboolean transpose , const GLdouble * value ), (program, location, count, transpose, value)) \
	FUNC(void , glProgramUniformMatrix2x3fv, GLPROGRAMUNIFORMMATRIX2X3FV, (GLuint program , GLint location , GLsizei count , GLboolean transpose , const GLfloat * value ), (program, location, count, transpose, value)) \
	FUNC(void , glProgramUniformMatrix3x2fv, GLPROGRAMUNIFORMMATRIX3X2FV, (GLuint program , GLint location , GLsizei count , GLboolean transpose , const GLfloat * value ), (program, location, count, transpose, value)) \
	FUNC(void , glProgramUniformMatrix2x4fv, GLPROGRAMUNIFORMMATRIX2X4FV, (GLuint program , GLint location , GLsizei count , GLboolean transpose , const GLfloat * value ), (program, location, count, transpose, value)) \
	FUNC(void , glProgramUniformMatrix4x2fv, GLPROGRAMUNIFORMMATRIX4X2FV, (GLuint program , GLint location , GLsizei count , GLboolean transpose , const GLfloat * value ), (program, location, count, transpose, value)) \
	FUNC(void , glProgramUniformMatrix3x4fv, GLPROGRAMUNIFORMMATRIX3X4FV, (GLuint program , GLint location , GLsizei count , GLboolean transpose , const GLfloat * value ), (program, location, count, transpose, value)) \
	FUNC(void , glProgramUniformMatrix4x3fv, GLPROGRAMUNIFORMMATRIX4X3FV, (GLuint program , GLint location , GLsizei count , GLboolean transpose , const GLfloat * value ), (program, location, count, transpose, value)) \
	FUNC(void , glProgramUniformMatrix2x3dv, GLPROGRAMUNIFORMMATRIX2X3DV, (GLuint program , GLint location , GLsizei count , GLboolean transpose , const GLdouble * value ), (program, location, count, transpose, value)) \
	FUNC(void , glProgramUniformMatrix3x2dv, GLPROGRAMUNIFORMMATRIX3X2DV, (GLuint program , GLint location , GLsizei count , GLboolean transpose , const GLdouble * value ), (program, location, count, transpose, value)) \
	FUNC(void , glProgramUniformMatrix2x4dv, GLPROGRAMUNIFORMMATRIX2X4DV, (GLuint program , GLint location , GLsizei count , GLboolean transpose , const GLdouble * value ), (program, location, count, transpose, value)) \
	FUNC(void , glProgramUniformMatrix4x2dv, GLPROGRAMUNIFORMMATRIX4X2DV, (GLuint program , GLint location , GLsizei count , GLboolean transpose , const GLdouble * value ), (program, location, count, transpose, value)) \
	FUNC(void , glProgramUniformMatrix3x4dv, GLPROGRAMUNIFORMMATRIX3X4DV, (GLuint program , GLint location , GLsizei count , GLboolean transpose , const GLdouble * value ), (program, location, count, transpose, value)) \
	FUNC(void , glProgramUniformMatrix4x3dv, GLPROGRAMUNIFORMMATRIX4X3DV, (GLuint program , GLint location , GLsizei count , GLboolean transpose , const GLdouble * value ), (program, location, count, transpose, value)) \
	FUNC(void , glValidateProgramPipeline, GLVALIDATEPROGRAMPIPELINE, (GLuint pipeline ), (pipeline)) \
	FUNC(void , glGetProgramPipelineInfoLog, GLGETPROGRAMPIPELINEINFOLOG, (GLuint pipeline , GLsizei bufSize , GLsizei * length , GLchar * infoLog ), (pipeline, bufSize, length, infoLog)) \
	END()
#else
#define EXTENSION_GL_ARB_separate_shader_objects(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_shader_bit_encoding
#define GL_ARB_shader_bit_encoding 1
#define EXTENSION_GL_ARB_shader_bit_encoding(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_shader_bit_encoding) \
	END()
#else
#define EXTENSION_GL_ARB_shader_bit_encoding(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_shader_objects
#define GL_ARB_shader_objects 1
#define EXTENSION_GL_ARB_shader_objects(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_shader_objects) \
	CONST(int, GL_PROGRAM_OBJECT_ARB, 0x8B40) \
	CONST(int, GL_SHADER_OBJECT_ARB, 0x8B48) \
	CONST(int, GL_OBJECT_TYPE_ARB, 0x8B4E) \
	CONST(int, GL_OBJECT_SUBTYPE_ARB, 0x8B4F) \
	CONST(int, GL_FLOAT_VEC2_ARB, 0x8B50) \
	CONST(int, GL_FLOAT_VEC3_ARB, 0x8B51) \
	CONST(int, GL_FLOAT_VEC4_ARB, 0x8B52) \
	CONST(int, GL_INT_VEC2_ARB, 0x8B53) \
	CONST(int, GL_INT_VEC3_ARB, 0x8B54) \
	CONST(int, GL_INT_VEC4_ARB, 0x8B55) \
	CONST(int, GL_BOOL_ARB, 0x8B56) \
	CONST(int, GL_BOOL_VEC2_ARB, 0x8B57) \
	CONST(int, GL_BOOL_VEC3_ARB, 0x8B58) \
	CONST(int, GL_BOOL_VEC4_ARB, 0x8B59) \
	CONST(int, GL_FLOAT_MAT2_ARB, 0x8B5A) \
	CONST(int, GL_FLOAT_MAT3_ARB, 0x8B5B) \
	CONST(int, GL_FLOAT_MAT4_ARB, 0x8B5C) \
	CONST(int, GL_SAMPLER_1D_ARB, 0x8B5D) \
	CONST(int, GL_SAMPLER_2D_ARB, 0x8B5E) \
	CONST(int, GL_SAMPLER_3D_ARB, 0x8B5F) \
	CONST(int, GL_SAMPLER_CUBE_ARB, 0x8B60) \
	CONST(int, GL_SAMPLER_1D_SHADOW_ARB, 0x8B61) \
	CONST(int, GL_SAMPLER_2D_SHADOW_ARB, 0x8B62) \
	CONST(int, GL_SAMPLER_2D_RECT_ARB, 0x8B63) \
	CONST(int, GL_SAMPLER_2D_RECT_SHADOW_ARB, 0x8B64) \
	CONST(int, GL_OBJECT_DELETE_STATUS_ARB, 0x8B80) \
	CONST(int, GL_OBJECT_COMPILE_STATUS_ARB, 0x8B81) \
	CONST(int, GL_OBJECT_LINK_STATUS_ARB, 0x8B82) \
	CONST(int, GL_OBJECT_VALIDATE_STATUS_ARB, 0x8B83) \
	CONST(int, GL_OBJECT_INFO_LOG_LENGTH_ARB, 0x8B84) \
	CONST(int, GL_OBJECT_ATTACHED_OBJECTS_ARB, 0x8B85) \
	CONST(int, GL_OBJECT_ACTIVE_UNIFORMS_ARB, 0x8B86) \
	CONST(int, GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB, 0x8B87) \
	CONST(int, GL_OBJECT_SHADER_SOURCE_LENGTH_ARB, 0x8B88) \
	FUNC(void , glDeleteObjectARB, GLDELETEOBJECTARB, (GLhandleARB obj ), (obj)) \
	FUNC(GLhandleARB , glGetHandleARB, GLGETHANDLEARB, (GLenum pname ), (pname)) \
	FUNC(void , glDetachObjectARB, GLDETACHOBJECTARB, (GLhandleARB containerObj , GLhandleARB attachedObj ), (containerObj, attachedObj)) \
	FUNC(GLhandleARB , glCreateShaderObjectARB, GLCREATESHADEROBJECTARB, (GLenum shaderType ), (shaderType)) \
	FUNC(void , glShaderSourceARB, GLSHADERSOURCEARB, (GLhandleARB shaderObj , GLsizei count , const GLcharARB * * string , const GLint * length ), (shaderObj, count, string, length)) \
	FUNC(void , glCompileShaderARB, GLCOMPILESHADERARB, (GLhandleARB shaderObj ), (shaderObj)) \
	FUNC(GLhandleARB , glCreateProgramObjectARB, GLCREATEPROGRAMOBJECTARB, (void ), ()) \
	FUNC(void , glAttachObjectARB, GLATTACHOBJECTARB, (GLhandleARB containerObj , GLhandleARB obj ), (containerObj, obj)) \
	FUNC(void , glLinkProgramARB, GLLINKPROGRAMARB, (GLhandleARB programObj ), (programObj)) \
	FUNC(void , glUseProgramObjectARB, GLUSEPROGRAMOBJECTARB, (GLhandleARB programObj ), (programObj)) \
	FUNC(void , glValidateProgramARB, GLVALIDATEPROGRAMARB, (GLhandleARB programObj ), (programObj)) \
	FUNC(void , glUniform1fARB, GLUNIFORM1FARB, (GLint location , GLfloat v0 ), (location, v0)) \
	FUNC(void , glUniform2fARB, GLUNIFORM2FARB, (GLint location , GLfloat v0 , GLfloat v1 ), (location, v0, v1)) \
	FUNC(void , glUniform3fARB, GLUNIFORM3FARB, (GLint location , GLfloat v0 , GLfloat v1 , GLfloat v2 ), (location, v0, v1, v2)) \
	FUNC(void , glUniform4fARB, GLUNIFORM4FARB, (GLint location , GLfloat v0 , GLfloat v1 , GLfloat v2 , GLfloat v3 ), (location, v0, v1, v2, v3)) \
	FUNC(void , glUniform1iARB, GLUNIFORM1IARB, (GLint location , GLint v0 ), (location, v0)) \
	FUNC(void , glUniform2iARB, GLUNIFORM2IARB, (GLint location , GLint v0 , GLint v1 ), (location, v0, v1)) \
	FUNC(void , glUniform3iARB, GLUNIFORM3IARB, (GLint location , GLint v0 , GLint v1 , GLint v2 ), (location, v0, v1, v2)) \
	FUNC(void , glUniform4iARB, GLUNIFORM4IARB, (GLint location , GLint v0 , GLint v1 , GLint v2 , GLint v3 ), (location, v0, v1, v2, v3)) \
	FUNC(void , glUniform1fvARB, GLUNIFORM1FVARB, (GLint location , GLsizei count , const GLfloat * value ), (location, count, value)) \
	FUNC(void , glUniform2fvARB, GLUNIFORM2FVARB, (GLint location , GLsizei count , const GLfloat * value ), (location, count, value)) \
	FUNC(void , glUniform3fvARB, GLUNIFORM3FVARB, (GLint location , GLsizei count , const GLfloat * value ), (location, count, value)) \
	FUNC(void , glUniform4fvARB, GLUNIFORM4FVARB, (GLint location , GLsizei count , const GLfloat * value ), (location, count, value)) \
	FUNC(void , glUniform1ivARB, GLUNIFORM1IVARB, (GLint location , GLsizei count , const GLint * value ), (location, count, value)) \
	FUNC(void , glUniform2ivARB, GLUNIFORM2IVARB, (GLint location , GLsizei count , const GLint * value ), (location, count, value)) \
	FUNC(void , glUniform3ivARB, GLUNIFORM3IVARB, (GLint location , GLsizei count , const GLint * value ), (location, count, value)) \
	FUNC(void , glUniform4ivARB, GLUNIFORM4IVARB, (GLint location , GLsizei count , const GLint * value ), (location, count, value)) \
	FUNC(void , glUniformMatrix2fvARB, GLUNIFORMMATRIX2FVARB, (GLint location , GLsizei count , GLboolean transpose , const GLfloat * value ), (location, count, transpose, value)) \
	FUNC(void , glUniformMatrix3fvARB, GLUNIFORMMATRIX3FVARB, (GLint location , GLsizei count , GLboolean transpose , const GLfloat * value ), (location, count, transpose, value)) \
	FUNC(void , glUniformMatrix4fvARB, GLUNIFORMMATRIX4FVARB, (GLint location , GLsizei count , GLboolean transpose , const GLfloat * value ), (location, count, transpose, value)) \
	FUNC(void , glGetObjectParameterfvARB, GLGETOBJECTPARAMETERFVARB, (GLhandleARB obj , GLenum pname , GLfloat * params ), (obj, pname, params)) \
	FUNC(void , glGetObjectParameterivARB, GLGETOBJECTPARAMETERIVARB, (GLhandleARB obj , GLenum pname , GLint * params ), (obj, pname, params)) \
	FUNC(void , glGetInfoLogARB, GLGETINFOLOGARB, (GLhandleARB obj , GLsizei maxLength , GLsizei * length , GLcharARB * infoLog ), (obj, maxLength, length, infoLog)) \
	FUNC(void , glGetAttachedObjectsARB, GLGETATTACHEDOBJECTSARB, (GLhandleARB containerObj , GLsizei maxCount , GLsizei * count , GLhandleARB * obj ), (containerObj, maxCount, count, obj)) \
	FUNC(GLint , glGetUniformLocationARB, GLGETUNIFORMLOCATIONARB, (GLhandleARB programObj , const GLcharARB * name ), (programObj, name)) \
	FUNC(void , glGetActiveUniformARB, GLGETACTIVEUNIFORMARB, (GLhandleARB programObj , GLuint index , GLsizei maxLength , GLsizei * length , GLint * size , GLenum * type , GLcharARB * name ), (programObj, index, maxLength, length, size, type, name)) \
	FUNC(void , glGetUniformfvARB, GLGETUNIFORMFVARB, (GLhandleARB programObj , GLint location , GLfloat * params ), (programObj, location, params)) \
	FUNC(void , glGetUniformivARB, GLGETUNIFORMIVARB, (GLhandleARB programObj , GLint location , GLint * params ), (programObj, location, params)) \
	FUNC(void , glGetShaderSourceARB, GLGETSHADERSOURCEARB, (GLhandleARB obj , GLsizei maxLength , GLsizei * length , GLcharARB * source ), (obj, maxLength, length, source)) \
	END()
#else
#define EXTENSION_GL_ARB_shader_objects(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_shader_precision
#define GL_ARB_shader_precision 1
#define EXTENSION_GL_ARB_shader_precision(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_shader_precision) \
	END()
#else
#define EXTENSION_GL_ARB_shader_precision(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_shader_stencil_export
#define GL_ARB_shader_stencil_export 1
#define EXTENSION_GL_ARB_shader_stencil_export(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_shader_stencil_export) \
	END()
#else
#define EXTENSION_GL_ARB_shader_stencil_export(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_shader_subroutine
#define GL_ARB_shader_subroutine 1
#define EXTENSION_GL_ARB_shader_subroutine(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_shader_subroutine) \
	CONST(int, GL_ACTIVE_SUBROUTINES, 0x8DE5) \
	CONST(int, GL_ACTIVE_SUBROUTINE_UNIFORMS, 0x8DE6) \
	CONST(int, GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS, 0x8E47) \
	CONST(int, GL_ACTIVE_SUBROUTINE_MAX_LENGTH, 0x8E48) \
	CONST(int, GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH, 0x8E49) \
	CONST(int, GL_MAX_SUBROUTINES, 0x8DE7) \
	CONST(int, GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS, 0x8DE8) \
	CONST(int, GL_NUM_COMPATIBLE_SUBROUTINES, 0x8E4A) \
	CONST(int, GL_COMPATIBLE_SUBROUTINES, 0x8E4B) \
	FUNC(GLint , glGetSubroutineUniformLocation, GLGETSUBROUTINEUNIFORMLOCATION, (GLuint program , GLenum shadertype , const GLchar * name ), (program, shadertype, name)) \
	FUNC(GLuint , glGetSubroutineIndex, GLGETSUBROUTINEINDEX, (GLuint program , GLenum shadertype , const GLchar * name ), (program, shadertype, name)) \
	FUNC(void , glGetActiveSubroutineUniformiv, GLGETACTIVESUBROUTINEUNIFORMIV, (GLuint program , GLenum shadertype , GLuint index , GLenum pname , GLint * values ), (program, shadertype, index, pname, values)) \
	FUNC(void , glGetActiveSubroutineUniformName, GLGETACTIVESUBROUTINEUNIFORMNAME, (GLuint program , GLenum shadertype , GLuint index , GLsizei bufsize , GLsizei * length , GLchar * name ), (program, shadertype, index, bufsize, length, name)) \
	FUNC(void , glGetActiveSubroutineName, GLGETACTIVESUBROUTINENAME, (GLuint program , GLenum shadertype , GLuint index , GLsizei bufsize , GLsizei * length , GLchar * name ), (program, shadertype, index, bufsize, length, name)) \
	FUNC(void , glUniformSubroutinesuiv, GLUNIFORMSUBROUTINESUIV, (GLenum shadertype , GLsizei count , const GLuint * indices ), (shadertype, count, indices)) \
	FUNC(void , glGetUniformSubroutineuiv, GLGETUNIFORMSUBROUTINEUIV, (GLenum shadertype , GLint location , GLuint * params ), (shadertype, location, params)) \
	FUNC(void , glGetProgramStageiv, GLGETPROGRAMSTAGEIV, (GLuint program , GLenum shadertype , GLenum pname , GLint * values ), (program, shadertype, pname, values)) \
	END()
#else
#define EXTENSION_GL_ARB_shader_subroutine(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_shader_texture_lod
#define GL_ARB_shader_texture_lod 1
#define EXTENSION_GL_ARB_shader_texture_lod(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_shader_texture_lod) \
	END()
#else
#define EXTENSION_GL_ARB_shader_texture_lod(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_shading_language_100
#define GL_ARB_shading_language_100 1
#define EXTENSION_GL_ARB_shading_language_100(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_shading_language_100) \
	CONST(int, GL_SHADING_LANGUAGE_VERSION_ARB, 0x8B8C) \
	END()
#else
#define EXTENSION_GL_ARB_shading_language_100(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_shading_language_include
#define GL_ARB_shading_language_include 1
#define EXTENSION_GL_ARB_shading_language_include(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_shading_language_include) \
	CONST(int, GL_SHADER_INCLUDE_ARB, 0x8DAE) \
	CONST(int, GL_NAMED_STRING_LENGTH_ARB, 0x8DE9) \
	CONST(int, GL_NAMED_STRING_TYPE_ARB, 0x8DEA) \
	FUNC(void , glNamedStringARB, GLNAMEDSTRINGARB, (GLenum type , GLint namelen , const GLchar * name , GLint stringlen , const GLchar * string ), (type, namelen, name, stringlen, string)) \
	FUNC(void , glDeleteNamedStringARB, GLDELETENAMEDSTRINGARB, (GLint namelen , const GLchar * name ), (namelen, name)) \
	FUNC(void , glCompileShaderIncludeARB, GLCOMPILESHADERINCLUDEARB, (GLuint shader , GLsizei count , const GLchar * * path , const GLint * length ), (shader, count, path, length)) \
	FUNC(GLboolean , glIsNamedStringARB, GLISNAMEDSTRINGARB, (GLint namelen , const GLchar * name ), (namelen, name)) \
	FUNC(void , glGetNamedStringARB, GLGETNAMEDSTRINGARB, (GLint namelen , const GLchar * name , GLsizei bufSize , GLint * stringlen , GLchar * string ), (namelen, name, bufSize, stringlen, string)) \
	FUNC(void , glGetNamedStringivARB, GLGETNAMEDSTRINGIVARB, (GLint namelen , const GLchar * name , GLenum pname , GLint * params ), (namelen, name, pname, params)) \
	END()
#else
#define EXTENSION_GL_ARB_shading_language_include(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_shadow
#define GL_ARB_shadow 1
#define EXTENSION_GL_ARB_shadow(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_shadow) \
	CONST(int, GL_TEXTURE_COMPARE_MODE_ARB, 0x884C) \
	CONST(int, GL_TEXTURE_COMPARE_FUNC_ARB, 0x884D) \
	CONST(int, GL_COMPARE_R_TO_TEXTURE_ARB, 0x884E) \
	END()
#else
#define EXTENSION_GL_ARB_shadow(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_shadow_ambient
#define GL_ARB_shadow_ambient 1
#define EXTENSION_GL_ARB_shadow_ambient(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_shadow_ambient) \
	CONST(int, GL_TEXTURE_COMPARE_FAIL_VALUE_ARB, 0x80BF) \
	END()
#else
#define EXTENSION_GL_ARB_shadow_ambient(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_sync
#define GL_ARB_sync 1
#define EXTENSION_GL_ARB_sync(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_sync) \
	CONST(int, GL_MAX_SERVER_WAIT_TIMEOUT, 0x9111) \
	CONST(int, GL_OBJECT_TYPE, 0x9112) \
	CONST(int, GL_SYNC_CONDITION, 0x9113) \
	CONST(int, GL_SYNC_STATUS, 0x9114) \
	CONST(int, GL_SYNC_FLAGS, 0x9115) \
	CONST(int, GL_SYNC_FENCE, 0x9116) \
	CONST(int, GL_SYNC_GPU_COMMANDS_COMPLETE, 0x9117) \
	CONST(int, GL_UNSIGNALED, 0x9118) \
	CONST(int, GL_SIGNALED, 0x9119) \
	CONST(int, GL_ALREADY_SIGNALED, 0x911A) \
	CONST(int, GL_TIMEOUT_EXPIRED, 0x911B) \
	CONST(int, GL_CONDITION_SATISFIED, 0x911C) \
	CONST(int, GL_WAIT_FAILED, 0x911D) \
	CONST(int, GL_SYNC_FLUSH_COMMANDS_BIT, 0x00000001) \
	CONST(long long unsigned , GL_TIMEOUT_IGNORED, 0xFFFFFFFFFFFFFFFFull) \
	FUNC(GLsync , glFenceSync, GLFENCESYNC, (GLenum condition , GLbitfield flags ), (condition, flags)) \
	FUNC(GLboolean , glIsSync, GLISSYNC, (GLsync sync ), (sync)) \
	FUNC(void , glDeleteSync, GLDELETESYNC, (GLsync sync ), (sync)) \
	FUNC(GLenum , glClientWaitSync, GLCLIENTWAITSYNC, (GLsync sync , GLbitfield flags , GLuint64 timeout ), (sync, flags, timeout)) \
	FUNC(void , glWaitSync, GLWAITSYNC, (GLsync sync , GLbitfield flags , GLuint64 timeout ), (sync, flags, timeout)) \
	FUNC(void , glGetInteger64v, GLGETINTEGER64V, (GLenum pname , GLint64 * params ), (pname, params)) \
	FUNC(void , glGetSynciv, GLGETSYNCIV, (GLsync sync , GLenum pname , GLsizei bufSize , GLsizei * length , GLint * values ), (sync, pname, bufSize, length, values)) \
	END()
#else
#define EXTENSION_GL_ARB_sync(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_tessellation_shader
#define GL_ARB_tessellation_shader 1
#define EXTENSION_GL_ARB_tessellation_shader(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_tessellation_shader) \
	CONST(int, GL_PATCHES, 0x000E) \
	CONST(int, GL_PATCH_VERTICES, 0x8E72) \
	CONST(int, GL_PATCH_DEFAULT_INNER_LEVEL, 0x8E73) \
	CONST(int, GL_PATCH_DEFAULT_OUTER_LEVEL, 0x8E74) \
	CONST(int, GL_TESS_CONTROL_OUTPUT_VERTICES, 0x8E75) \
	CONST(int, GL_TESS_GEN_MODE, 0x8E76) \
	CONST(int, GL_TESS_GEN_SPACING, 0x8E77) \
	CONST(int, GL_TESS_GEN_VERTEX_ORDER, 0x8E78) \
	CONST(int, GL_TESS_GEN_POINT_MODE, 0x8E79) \
	CONST(int, GL_ISOLINES, 0x8E7A) \
	CONST(int, GL_FRACTIONAL_ODD, 0x8E7B) \
	CONST(int, GL_FRACTIONAL_EVEN, 0x8E7C) \
	CONST(int, GL_MAX_PATCH_VERTICES, 0x8E7D) \
	CONST(int, GL_MAX_TESS_GEN_LEVEL, 0x8E7E) \
	CONST(int, GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS, 0x8E7F) \
	CONST(int, GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS, 0x8E80) \
	CONST(int, GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS, 0x8E81) \
	CONST(int, GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS, 0x8E82) \
	CONST(int, GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS, 0x8E83) \
	CONST(int, GL_MAX_TESS_PATCH_COMPONENTS, 0x8E84) \
	CONST(int, GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS, 0x8E85) \
	CONST(int, GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS, 0x8E86) \
	CONST(int, GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS, 0x8E89) \
	CONST(int, GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS, 0x8E8A) \
	CONST(int, GL_MAX_TESS_CONTROL_INPUT_COMPONENTS, 0x886C) \
	CONST(int, GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS, 0x886D) \
	CONST(int, GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS, 0x8E1E) \
	CONST(int, GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS, 0x8E1F) \
	CONST(int, GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER, 0x84F0) \
	CONST(int, GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER, 0x84F1) \
	CONST(int, GL_TESS_EVALUATION_SHADER, 0x8E87) \
	CONST(int, GL_TESS_CONTROL_SHADER, 0x8E88) \
	FUNC(void , glPatchParameteri, GLPATCHPARAMETERI, (GLenum pname , GLint value ), (pname, value)) \
	FUNC(void , glPatchParameterfv, GLPATCHPARAMETERFV, (GLenum pname , const GLfloat * values ), (pname, values)) \
	END()
#else
#define EXTENSION_GL_ARB_tessellation_shader(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_texture_border_clamp
#define GL_ARB_texture_border_clamp 1
#define EXTENSION_GL_ARB_texture_border_clamp(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_texture_border_clamp) \
	CONST(int, GL_CLAMP_TO_BORDER_ARB, 0x812D) \
	END()
#else
#define EXTENSION_GL_ARB_texture_border_clamp(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_texture_buffer_object
#define GL_ARB_texture_buffer_object 1
#define EXTENSION_GL_ARB_texture_buffer_object(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_texture_buffer_object) \
	CONST(int, GL_TEXTURE_BUFFER_ARB, 0x8C2A) \
	CONST(int, GL_MAX_TEXTURE_BUFFER_SIZE_ARB, 0x8C2B) \
	CONST(int, GL_TEXTURE_BINDING_BUFFER_ARB, 0x8C2C) \
	CONST(int, GL_TEXTURE_BUFFER_DATA_STORE_BINDING_ARB, 0x8C2D) \
	CONST(int, GL_TEXTURE_BUFFER_FORMAT_ARB, 0x8C2E) \
	FUNC(void , glTexBufferARB, GLTEXBUFFERARB, (GLenum target , GLenum internalformat , GLuint buffer ), (target, internalformat, buffer)) \
	END()
#else
#define EXTENSION_GL_ARB_texture_buffer_object(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_texture_buffer_object_rgb32
#define GL_ARB_texture_buffer_object_rgb32 1
#define EXTENSION_GL_ARB_texture_buffer_object_rgb32(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_texture_buffer_object_rgb32) \
	END()
#else
#define EXTENSION_GL_ARB_texture_buffer_object_rgb32(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_texture_compression
#define GL_ARB_texture_compression 1
#define EXTENSION_GL_ARB_texture_compression(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_texture_compression) \
	CONST(int, GL_COMPRESSED_ALPHA_ARB, 0x84E9) \
	CONST(int, GL_COMPRESSED_LUMINANCE_ARB, 0x84EA) \
	CONST(int, GL_COMPRESSED_LUMINANCE_ALPHA_ARB, 0x84EB) \
	CONST(int, GL_COMPRESSED_INTENSITY_ARB, 0x84EC) \
	CONST(int, GL_COMPRESSED_RGB_ARB, 0x84ED) \
	CONST(int, GL_COMPRESSED_RGBA_ARB, 0x84EE) \
	CONST(int, GL_TEXTURE_COMPRESSION_HINT_ARB, 0x84EF) \
	CONST(int, GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB, 0x86A0) \
	CONST(int, GL_TEXTURE_COMPRESSED_ARB, 0x86A1) \
	CONST(int, GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB, 0x86A2) \
	CONST(int, GL_COMPRESSED_TEXTURE_FORMATS_ARB, 0x86A3) \
	FUNC(void , glCompressedTexImage3DARB, GLCOMPRESSEDTEXIMAGE3DARB, (GLenum target , GLint level , GLenum internalformat , GLsizei width , GLsizei height , GLsizei depth , GLint border , GLsizei imageSize , const GLvoid * data ), (target, level, internalformat, width, height, depth, border, imageSize, data)) \
	FUNC(void , glCompressedTexImage2DARB, GLCOMPRESSEDTEXIMAGE2DARB, (GLenum target , GLint level , GLenum internalformat , GLsizei width , GLsizei height , GLint border , GLsizei imageSize , const GLvoid * data ), (target, level, internalformat, width, height, border, imageSize, data)) \
	FUNC(void , glCompressedTexImage1DARB, GLCOMPRESSEDTEXIMAGE1DARB, (GLenum target , GLint level , GLenum internalformat , GLsizei width , GLint border , GLsizei imageSize , const GLvoid * data ), (target, level, internalformat, width, border, imageSize, data)) \
	FUNC(void , glCompressedTexSubImage3DARB, GLCOMPRESSEDTEXSUBIMAGE3DARB, (GLenum target , GLint level , GLint xoffset , GLint yoffset , GLint zoffset , GLsizei width , GLsizei height , GLsizei depth , GLenum format , GLsizei imageSize , const GLvoid * data ), (target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data)) \
	FUNC(void , glCompressedTexSubImage2DARB, GLCOMPRESSEDTEXSUBIMAGE2DARB, (GLenum target , GLint level , GLint xoffset , GLint yoffset , GLsizei width , GLsizei height , GLenum format , GLsizei imageSize , const GLvoid * data ), (target, level, xoffset, yoffset, width, height, format, imageSize, data)) \
	FUNC(void , glCompressedTexSubImage1DARB, GLCOMPRESSEDTEXSUBIMAGE1DARB, (GLenum target , GLint level , GLint xoffset , GLsizei width , GLenum format , GLsizei imageSize , const GLvoid * data ), (target, level, xoffset, width, format, imageSize, data)) \
	FUNC(void , glGetCompressedTexImageARB, GLGETCOMPRESSEDTEXIMAGEARB, (GLenum target , GLint level , GLvoid * img ), (target, level, img)) \
	END()
#else
#define EXTENSION_GL_ARB_texture_compression(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_texture_compression_bptc
#define GL_ARB_texture_compression_bptc 1
#define EXTENSION_GL_ARB_texture_compression_bptc(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_texture_compression_bptc) \
	CONST(int, GL_COMPRESSED_RGBA_BPTC_UNORM_ARB, 0x8E8C) \
	CONST(int, GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB, 0x8E8D) \
	CONST(int, GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB, 0x8E8E) \
	CONST(int, GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB, 0x8E8F) \
	END()
#else
#define EXTENSION_GL_ARB_texture_compression_bptc(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_texture_compression_rgtc
#define GL_ARB_texture_compression_rgtc 1
#define EXTENSION_GL_ARB_texture_compression_rgtc(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_texture_compression_rgtc) \
	CONST(int, GL_COMPRESSED_RED_RGTC1, 0x8DBB) \
	CONST(int, GL_COMPRESSED_SIGNED_RED_RGTC1, 0x8DBC) \
	CONST(int, GL_COMPRESSED_RG_RGTC2, 0x8DBD) \
	CONST(int, GL_COMPRESSED_SIGNED_RG_RGTC2, 0x8DBE) \
	END()
#else
#define EXTENSION_GL_ARB_texture_compression_rgtc(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_texture_cube_map
#define GL_ARB_texture_cube_map 1
#define EXTENSION_GL_ARB_texture_cube_map(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_texture_cube_map) \
	CONST(int, GL_NORMAL_MAP_ARB, 0x8511) \
	CONST(int, GL_REFLECTION_MAP_ARB, 0x8512) \
	CONST(int, GL_TEXTURE_CUBE_MAP_ARB, 0x8513) \
	CONST(int, GL_TEXTURE_BINDING_CUBE_MAP_ARB, 0x8514) \
	CONST(int, GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB, 0x8515) \
	CONST(int, GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB, 0x8516) \
	CONST(int, GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB, 0x8517) \
	CONST(int, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB, 0x8518) \
	CONST(int, GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB, 0x8519) \
	CONST(int, GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB, 0x851A) \
	CONST(int, GL_PROXY_TEXTURE_CUBE_MAP_ARB, 0x851B) \
	CONST(int, GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB, 0x851C) \
	END()
#else
#define EXTENSION_GL_ARB_texture_cube_map(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_texture_cube_map_array
#define GL_ARB_texture_cube_map_array 1
#define EXTENSION_GL_ARB_texture_cube_map_array(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_texture_cube_map_array) \
	CONST(int, GL_TEXTURE_CUBE_MAP_ARRAY_ARB, 0x9009) \
	CONST(int, GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_ARB, 0x900A) \
	CONST(int, GL_PROXY_TEXTURE_CUBE_MAP_ARRAY_ARB, 0x900B) \
	CONST(int, GL_SAMPLER_CUBE_MAP_ARRAY_ARB, 0x900C) \
	CONST(int, GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_ARB, 0x900D) \
	CONST(int, GL_INT_SAMPLER_CUBE_MAP_ARRAY_ARB, 0x900E) \
	CONST(int, GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_ARB, 0x900F) \
	END()
#else
#define EXTENSION_GL_ARB_texture_cube_map_array(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_texture_env_add
#define GL_ARB_texture_env_add 1
#define EXTENSION_GL_ARB_texture_env_add(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_texture_env_add) \
	END()
#else
#define EXTENSION_GL_ARB_texture_env_add(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_texture_env_combine
#define GL_ARB_texture_env_combine 1
#define EXTENSION_GL_ARB_texture_env_combine(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_texture_env_combine) \
	CONST(int, GL_COMBINE_ARB, 0x8570) \
	CONST(int, GL_COMBINE_RGB_ARB, 0x8571) \
	CONST(int, GL_COMBINE_ALPHA_ARB, 0x8572) \
	CONST(int, GL_SOURCE0_RGB_ARB, 0x8580) \
	CONST(int, GL_SOURCE1_RGB_ARB, 0x8581) \
	CONST(int, GL_SOURCE2_RGB_ARB, 0x8582) \
	CONST(int, GL_SOURCE0_ALPHA_ARB, 0x8588) \
	CONST(int, GL_SOURCE1_ALPHA_ARB, 0x8589) \
	CONST(int, GL_SOURCE2_ALPHA_ARB, 0x858A) \
	CONST(int, GL_OPERAND0_RGB_ARB, 0x8590) \
	CONST(int, GL_OPERAND1_RGB_ARB, 0x8591) \
	CONST(int, GL_OPERAND2_RGB_ARB, 0x8592) \
	CONST(int, GL_OPERAND0_ALPHA_ARB, 0x8598) \
	CONST(int, GL_OPERAND1_ALPHA_ARB, 0x8599) \
	CONST(int, GL_OPERAND2_ALPHA_ARB, 0x859A) \
	CONST(int, GL_RGB_SCALE_ARB, 0x8573) \
	CONST(int, GL_ADD_SIGNED_ARB, 0x8574) \
	CONST(int, GL_INTERPOLATE_ARB, 0x8575) \
	CONST(int, GL_SUBTRACT_ARB, 0x84E7) \
	CONST(int, GL_CONSTANT_ARB, 0x8576) \
	CONST(int, GL_PRIMARY_COLOR_ARB, 0x8577) \
	CONST(int, GL_PREVIOUS_ARB, 0x8578) \
	END()
#else
#define EXTENSION_GL_ARB_texture_env_combine(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_texture_env_crossbar
#define GL_ARB_texture_env_crossbar 1
#define EXTENSION_GL_ARB_texture_env_crossbar(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_texture_env_crossbar) \
	END()
#else
#define EXTENSION_GL_ARB_texture_env_crossbar(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_texture_env_dot3
#define GL_ARB_texture_env_dot3 1
#define EXTENSION_GL_ARB_texture_env_dot3(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_texture_env_dot3) \
	CONST(int, GL_DOT3_RGB_ARB, 0x86AE) \
	CONST(int, GL_DOT3_RGBA_ARB, 0x86AF) \
	END()
#else
#define EXTENSION_GL_ARB_texture_env_dot3(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_texture_float
#define GL_ARB_texture_float 1
#define EXTENSION_GL_ARB_texture_float(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_texture_float) \
	CONST(int, GL_TEXTURE_RED_TYPE_ARB, 0x8C10) \
	CONST(int, GL_TEXTURE_GREEN_TYPE_ARB, 0x8C11) \
	CONST(int, GL_TEXTURE_BLUE_TYPE_ARB, 0x8C12) \
	CONST(int, GL_TEXTURE_ALPHA_TYPE_ARB, 0x8C13) \
	CONST(int, GL_TEXTURE_LUMINANCE_TYPE_ARB, 0x8C14) \
	CONST(int, GL_TEXTURE_INTENSITY_TYPE_ARB, 0x8C15) \
	CONST(int, GL_TEXTURE_DEPTH_TYPE_ARB, 0x8C16) \
	CONST(int, GL_UNSIGNED_NORMALIZED_ARB, 0x8C17) \
	CONST(int, GL_RGBA32F_ARB, 0x8814) \
	CONST(int, GL_RGB32F_ARB, 0x8815) \
	CONST(int, GL_ALPHA32F_ARB, 0x8816) \
	CONST(int, GL_INTENSITY32F_ARB, 0x8817) \
	CONST(int, GL_LUMINANCE32F_ARB, 0x8818) \
	CONST(int, GL_LUMINANCE_ALPHA32F_ARB, 0x8819) \
	CONST(int, GL_RGBA16F_ARB, 0x881A) \
	CONST(int, GL_RGB16F_ARB, 0x881B) \
	CONST(int, GL_ALPHA16F_ARB, 0x881C) \
	CONST(int, GL_INTENSITY16F_ARB, 0x881D) \
	CONST(int, GL_LUMINANCE16F_ARB, 0x881E) \
	CONST(int, GL_LUMINANCE_ALPHA16F_ARB, 0x881F) \
	END()
#else
#define EXTENSION_GL_ARB_texture_float(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_texture_gather
#define GL_ARB_texture_gather 1
#define EXTENSION_GL_ARB_texture_gather(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_texture_gather) \
	CONST(int, GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_ARB, 0x8E5E) \
	CONST(int, GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_ARB, 0x8E5F) \
	END()
#else
#define EXTENSION_GL_ARB_texture_gather(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_texture_mirrored_repeat
#define GL_ARB_texture_mirrored_repeat 1
#define EXTENSION_GL_ARB_texture_mirrored_repeat(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_texture_mirrored_repeat) \
	CONST(int, GL_MIRRORED_REPEAT_ARB, 0x8370) \
	END()
#else
#define EXTENSION_GL_ARB_texture_mirrored_repeat(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_texture_multisample
#define GL_ARB_texture_multisample 1
#define EXTENSION_GL_ARB_texture_multisample(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_texture_multisample) \
	CONST(int, GL_SAMPLE_POSITION, 0x8E50) \
	CONST(int, GL_SAMPLE_MASK, 0x8E51) \
	CONST(int, GL_SAMPLE_MASK_VALUE, 0x8E52) \
	CONST(int, GL_MAX_SAMPLE_MASK_WORDS, 0x8E59) \
	CONST(int, GL_TEXTURE_2D_MULTISAMPLE, 0x9100) \
	CONST(int, GL_PROXY_TEXTURE_2D_MULTISAMPLE, 0x9101) \
	CONST(int, GL_TEXTURE_2D_MULTISAMPLE_ARRAY, 0x9102) \
	CONST(int, GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY, 0x9103) \
	CONST(int, GL_TEXTURE_BINDING_2D_MULTISAMPLE, 0x9104) \
	CONST(int, GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY, 0x9105) \
	CONST(int, GL_TEXTURE_SAMPLES, 0x9106) \
	CONST(int, GL_TEXTURE_FIXED_SAMPLE_LOCATIONS, 0x9107) \
	CONST(int, GL_SAMPLER_2D_MULTISAMPLE, 0x9108) \
	CONST(int, GL_INT_SAMPLER_2D_MULTISAMPLE, 0x9109) \
	CONST(int, GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE, 0x910A) \
	CONST(int, GL_SAMPLER_2D_MULTISAMPLE_ARRAY, 0x910B) \
	CONST(int, GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY, 0x910C) \
	CONST(int, GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY, 0x910D) \
	CONST(int, GL_MAX_COLOR_TEXTURE_SAMPLES, 0x910E) \
	CONST(int, GL_MAX_DEPTH_TEXTURE_SAMPLES, 0x910F) \
	CONST(int, GL_MAX_INTEGER_SAMPLES, 0x9110) \
	FUNC(void , glTexImage2DMultisample, GLTEXIMAGE2DMULTISAMPLE, (GLenum target , GLsizei samples , GLint internalformat , GLsizei width , GLsizei height , GLboolean fixedsamplelocations ), (target, samples, internalformat, width, height, fixedsamplelocations)) \
	FUNC(void , glTexImage3DMultisample, GLTEXIMAGE3DMULTISAMPLE, (GLenum target , GLsizei samples , GLint internalformat , GLsizei width , GLsizei height , GLsizei depth , GLboolean fixedsamplelocations ), (target, samples, internalformat, width, height, depth, fixedsamplelocations)) \
	FUNC(void , glGetMultisamplefv, GLGETMULTISAMPLEFV, (GLenum pname , GLuint index , GLfloat * val ), (pname, index, val)) \
	FUNC(void , glSampleMaski, GLSAMPLEMASKI, (GLuint index , GLbitfield mask ), (index, mask)) \
	END()
#else
#define EXTENSION_GL_ARB_texture_multisample(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_texture_non_power_of_two
#define GL_ARB_texture_non_power_of_two 1
#define EXTENSION_GL_ARB_texture_non_power_of_two(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_texture_non_power_of_two) \
	END()
#else
#define EXTENSION_GL_ARB_texture_non_power_of_two(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_texture_query_lod
#define GL_ARB_texture_query_lod 1
#define EXTENSION_GL_ARB_texture_query_lod(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_texture_query_lod) \
	END()
#else
#define EXTENSION_GL_ARB_texture_query_lod(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_texture_rectangle
#define GL_ARB_texture_rectangle 1
#define EXTENSION_GL_ARB_texture_rectangle(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_texture_rectangle) \
	CONST(int, GL_TEXTURE_RECTANGLE_ARB, 0x84F5) \
	CONST(int, GL_TEXTURE_BINDING_RECTANGLE_ARB, 0x84F6) \
	CONST(int, GL_PROXY_TEXTURE_RECTANGLE_ARB, 0x84F7) \
	CONST(int, GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB, 0x84F8) \
	END()
#else
#define EXTENSION_GL_ARB_texture_rectangle(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_texture_rg
#define GL_ARB_texture_rg 1
#define EXTENSION_GL_ARB_texture_rg(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_texture_rg) \
	CONST(int, GL_RG, 0x8227) \
	CONST(int, GL_RG_INTEGER, 0x8228) \
	CONST(int, GL_R8, 0x8229) \
	CONST(int, GL_R16, 0x822A) \
	CONST(int, GL_RG8, 0x822B) \
	CONST(int, GL_RG16, 0x822C) \
	CONST(int, GL_R16F, 0x822D) \
	CONST(int, GL_R32F, 0x822E) \
	CONST(int, GL_RG16F, 0x822F) \
	CONST(int, GL_RG32F, 0x8230) \
	CONST(int, GL_R8I, 0x8231) \
	CONST(int, GL_R8UI, 0x8232) \
	CONST(int, GL_R16I, 0x8233) \
	CONST(int, GL_R16UI, 0x8234) \
	CONST(int, GL_R32I, 0x8235) \
	CONST(int, GL_R32UI, 0x8236) \
	CONST(int, GL_RG8I, 0x8237) \
	CONST(int, GL_RG8UI, 0x8238) \
	CONST(int, GL_RG16I, 0x8239) \
	CONST(int, GL_RG16UI, 0x823A) \
	CONST(int, GL_RG32I, 0x823B) \
	CONST(int, GL_RG32UI, 0x823C) \
	END()
#else
#define EXTENSION_GL_ARB_texture_rg(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_texture_rgb10_a2ui
#define GL_ARB_texture_rgb10_a2ui 1
#define EXTENSION_GL_ARB_texture_rgb10_a2ui(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_texture_rgb10_a2ui) \
	CONST(int, GL_RGB10_A2UI, 0x906F) \
	END()
#else
#define EXTENSION_GL_ARB_texture_rgb10_a2ui(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_texture_swizzle
#define GL_ARB_texture_swizzle 1
#define EXTENSION_GL_ARB_texture_swizzle(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_texture_swizzle) \
	CONST(int, GL_TEXTURE_SWIZZLE_R, 0x8E42) \
	CONST(int, GL_TEXTURE_SWIZZLE_G, 0x8E43) \
	CONST(int, GL_TEXTURE_SWIZZLE_B, 0x8E44) \
	CONST(int, GL_TEXTURE_SWIZZLE_A, 0x8E45) \
	CONST(int, GL_TEXTURE_SWIZZLE_RGBA, 0x8E46) \
	END()
#else
#define EXTENSION_GL_ARB_texture_swizzle(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_timer_query
#define GL_ARB_timer_query 1
#define EXTENSION_GL_ARB_timer_query(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_timer_query) \
	CONST(int, GL_TIME_ELAPSED, 0x88BF) \
	CONST(int, GL_TIMESTAMP, 0x8E28) \
	FUNC(void , glQueryCounter, GLQUERYCOUNTER, (GLuint id , GLenum target ), (id, target)) \
	FUNC(void , glGetQueryObjecti64v, GLGETQUERYOBJECTI64V, (GLuint id , GLenum pname , GLint64 * params ), (id, pname, params)) \
	FUNC(void , glGetQueryObjectui64v, GLGETQUERYOBJECTUI64V, (GLuint id , GLenum pname , GLuint64 * params ), (id, pname, params)) \
	END()
#else
#define EXTENSION_GL_ARB_timer_query(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_transform_feedback2
#define GL_ARB_transform_feedback2 1
#define EXTENSION_GL_ARB_transform_feedback2(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_transform_feedback2) \
	CONST(int, GL_TRANSFORM_FEEDBACK, 0x8E22) \
	CONST(int, GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED, 0x8E23) \
	CONST(int, GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE, 0x8E24) \
	CONST(int, GL_TRANSFORM_FEEDBACK_BINDING, 0x8E25) \
	FUNC(void , glBindTransformFeedback, GLBINDTRANSFORMFEEDBACK, (GLenum target , GLuint id ), (target, id)) \
	FUNC(void , glDeleteTransformFeedbacks, GLDELETETRANSFORMFEEDBACKS, (GLsizei n , const GLuint * ids ), (n, ids)) \
	FUNC(void , glGenTransformFeedbacks, GLGENTRANSFORMFEEDBACKS, (GLsizei n , GLuint * ids ), (n, ids)) \
	FUNC(GLboolean , glIsTransformFeedback, GLISTRANSFORMFEEDBACK, (GLuint id ), (id)) \
	FUNC(void , glPauseTransformFeedback, GLPAUSETRANSFORMFEEDBACK, (void ), ()) \
	FUNC(void , glResumeTransformFeedback, GLRESUMETRANSFORMFEEDBACK, (void ), ()) \
	FUNC(void , glDrawTransformFeedback, GLDRAWTRANSFORMFEEDBACK, (GLenum mode , GLuint id ), (mode, id)) \
	END()
#else
#define EXTENSION_GL_ARB_transform_feedback2(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_transform_feedback3
#define GL_ARB_transform_feedback3 1
#define EXTENSION_GL_ARB_transform_feedback3(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_transform_feedback3) \
	CONST(int, GL_MAX_TRANSFORM_FEEDBACK_BUFFERS, 0x8E70) \
	CONST(int, GL_MAX_VERTEX_STREAMS, 0x8E71) \
	FUNC(void , glDrawTransformFeedbackStream, GLDRAWTRANSFORMFEEDBACKSTREAM, (GLenum mode , GLuint id , GLuint stream ), (mode, id, stream)) \
	FUNC(void , glBeginQueryIndexed, GLBEGINQUERYINDEXED, (GLenum target , GLuint index , GLuint id ), (target, index, id)) \
	FUNC(void , glEndQueryIndexed, GLENDQUERYINDEXED, (GLenum target , GLuint index ), (target, index)) \
	FUNC(void , glGetQueryIndexediv, GLGETQUERYINDEXEDIV, (GLenum target , GLuint index , GLenum pname , GLint * params ), (target, index, pname, params)) \
	END()
#else
#define EXTENSION_GL_ARB_transform_feedback3(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_transpose_matrix
#define GL_ARB_transpose_matrix 1
#define EXTENSION_GL_ARB_transpose_matrix(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_transpose_matrix) \
	CONST(int, GL_TRANSPOSE_MODELVIEW_MATRIX_ARB, 0x84E3) \
	CONST(int, GL_TRANSPOSE_PROJECTION_MATRIX_ARB, 0x84E4) \
	CONST(int, GL_TRANSPOSE_TEXTURE_MATRIX_ARB, 0x84E5) \
	CONST(int, GL_TRANSPOSE_COLOR_MATRIX_ARB, 0x84E6) \
	FUNC(void , glLoadTransposeMatrixfARB, GLLOADTRANSPOSEMATRIXFARB, (const GLfloat * m ), (m)) \
	FUNC(void , glLoadTransposeMatrixdARB, GLLOADTRANSPOSEMATRIXDARB, (const GLdouble * m ), (m)) \
	FUNC(void , glMultTransposeMatrixfARB, GLMULTTRANSPOSEMATRIXFARB, (const GLfloat * m ), (m)) \
	FUNC(void , glMultTransposeMatrixdARB, GLMULTTRANSPOSEMATRIXDARB, (const GLdouble * m ), (m)) \
	END()
#else
#define EXTENSION_GL_ARB_transpose_matrix(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_uniform_buffer_object
#define GL_ARB_uniform_buffer_object 1
#define EXTENSION_GL_ARB_uniform_buffer_object(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_uniform_buffer_object) \
	CONST(int, GL_UNIFORM_BUFFER, 0x8A11) \
	CONST(int, GL_UNIFORM_BUFFER_BINDING, 0x8A28) \
	CONST(int, GL_UNIFORM_BUFFER_START, 0x8A29) \
	CONST(int, GL_UNIFORM_BUFFER_SIZE, 0x8A2A) \
	CONST(int, GL_MAX_VERTEX_UNIFORM_BLOCKS, 0x8A2B) \
	CONST(int, GL_MAX_GEOMETRY_UNIFORM_BLOCKS, 0x8A2C) \
	CONST(int, GL_MAX_FRAGMENT_UNIFORM_BLOCKS, 0x8A2D) \
	CONST(int, GL_MAX_COMBINED_UNIFORM_BLOCKS, 0x8A2E) \
	CONST(int, GL_MAX_UNIFORM_BUFFER_BINDINGS, 0x8A2F) \
	CONST(int, GL_MAX_UNIFORM_BLOCK_SIZE, 0x8A30) \
	CONST(int, GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS, 0x8A31) \
	CONST(int, GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS, 0x8A32) \
	CONST(int, GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS, 0x8A33) \
	CONST(int, GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT, 0x8A34) \
	CONST(int, GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH, 0x8A35) \
	CONST(int, GL_ACTIVE_UNIFORM_BLOCKS, 0x8A36) \
	CONST(int, GL_UNIFORM_TYPE, 0x8A37) \
	CONST(int, GL_UNIFORM_SIZE, 0x8A38) \
	CONST(int, GL_UNIFORM_NAME_LENGTH, 0x8A39) \
	CONST(int, GL_UNIFORM_BLOCK_INDEX, 0x8A3A) \
	CONST(int, GL_UNIFORM_OFFSET, 0x8A3B) \
	CONST(int, GL_UNIFORM_ARRAY_STRIDE, 0x8A3C) \
	CONST(int, GL_UNIFORM_MATRIX_STRIDE, 0x8A3D) \
	CONST(int, GL_UNIFORM_IS_ROW_MAJOR, 0x8A3E) \
	CONST(int, GL_UNIFORM_BLOCK_BINDING, 0x8A3F) \
	CONST(int, GL_UNIFORM_BLOCK_DATA_SIZE, 0x8A40) \
	CONST(int, GL_UNIFORM_BLOCK_NAME_LENGTH, 0x8A41) \
	CONST(int, GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS, 0x8A42) \
	CONST(int, GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES, 0x8A43) \
	CONST(int, GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER, 0x8A44) \
	CONST(int, GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER, 0x8A45) \
	CONST(int, GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER, 0x8A46) \
	CONST(unsigned , GL_INVALID_INDEX, 0xFFFFFFFFu) \
	FUNC(void , glGetUniformIndices, GLGETUNIFORMINDICES, (GLuint program , GLsizei uniformCount , const GLchar * * uniformNames , GLuint * uniformIndices ), (program, uniformCount, uniformNames, uniformIndices)) \
	FUNC(void , glGetActiveUniformsiv, GLGETACTIVEUNIFORMSIV, (GLuint program , GLsizei uniformCount , const GLuint * uniformIndices , GLenum pname , GLint * params ), (program, uniformCount, uniformIndices, pname, params)) \
	FUNC(void , glGetActiveUniformName, GLGETACTIVEUNIFORMNAME, (GLuint program , GLuint uniformIndex , GLsizei bufSize , GLsizei * length , GLchar * uniformName ), (program, uniformIndex, bufSize, length, uniformName)) \
	FUNC(GLuint , glGetUniformBlockIndex, GLGETUNIFORMBLOCKINDEX, (GLuint program , const GLchar * uniformBlockName ), (program, uniformBlockName)) \
	FUNC(void , glGetActiveUniformBlockiv, GLGETACTIVEUNIFORMBLOCKIV, (GLuint program , GLuint uniformBlockIndex , GLenum pname , GLint * params ), (program, uniformBlockIndex, pname, params)) \
	FUNC(void , glGetActiveUniformBlockName, GLGETACTIVEUNIFORMBLOCKNAME, (GLuint program , GLuint uniformBlockIndex , GLsizei bufSize , GLsizei * length , GLchar * uniformBlockName ), (program, uniformBlockIndex, bufSize, length, uniformBlockName)) \
	FUNC(void , glUniformBlockBinding, GLUNIFORMBLOCKBINDING, (GLuint program , GLuint uniformBlockIndex , GLuint uniformBlockBinding ), (program, uniformBlockIndex, uniformBlockBinding)) \
	END()
#else
#define EXTENSION_GL_ARB_uniform_buffer_object(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_vertex_array_bgra
#define GL_ARB_vertex_array_bgra 1
#define EXTENSION_GL_ARB_vertex_array_bgra(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_vertex_array_bgra) \
	END()
#else
#define EXTENSION_GL_ARB_vertex_array_bgra(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_vertex_array_object
#define GL_ARB_vertex_array_object 1
#define EXTENSION_GL_ARB_vertex_array_object(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_vertex_array_object) \
	CONST(int, GL_VERTEX_ARRAY_BINDING, 0x85B5) \
	FUNC(void , glBindVertexArray, GLBINDVERTEXARRAY, (GLuint array ), (array)) \
	FUNC(void , glDeleteVertexArrays, GLDELETEVERTEXARRAYS, (GLsizei n , const GLuint * arrays ), (n, arrays)) \
	FUNC(void , glGenVertexArrays, GLGENVERTEXARRAYS, (GLsizei n , GLuint * arrays ), (n, arrays)) \
	FUNC(GLboolean , glIsVertexArray, GLISVERTEXARRAY, (GLuint array ), (array)) \
	END()
#else
#define EXTENSION_GL_ARB_vertex_array_object(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_vertex_attrib_64bit
#define GL_ARB_vertex_attrib_64bit 1
#define EXTENSION_GL_ARB_vertex_attrib_64bit(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_vertex_attrib_64bit) \
	FUNC(void , glVertexAttribL1d, GLVERTEXATTRIBL1D, (GLuint index , GLdouble x ), (index, x)) \
	FUNC(void , glVertexAttribL2d, GLVERTEXATTRIBL2D, (GLuint index , GLdouble x , GLdouble y ), (index, x, y)) \
	FUNC(void , glVertexAttribL3d, GLVERTEXATTRIBL3D, (GLuint index , GLdouble x , GLdouble y , GLdouble z ), (index, x, y, z)) \
	FUNC(void , glVertexAttribL4d, GLVERTEXATTRIBL4D, (GLuint index , GLdouble x , GLdouble y , GLdouble z , GLdouble w ), (index, x, y, z, w)) \
	FUNC(void , glVertexAttribL1dv, GLVERTEXATTRIBL1DV, (GLuint index , const GLdouble * v ), (index, v)) \
	FUNC(void , glVertexAttribL2dv, GLVERTEXATTRIBL2DV, (GLuint index , const GLdouble * v ), (index, v)) \
	FUNC(void , glVertexAttribL3dv, GLVERTEXATTRIBL3DV, (GLuint index , const GLdouble * v ), (index, v)) \
	FUNC(void , glVertexAttribL4dv, GLVERTEXATTRIBL4DV, (GLuint index , const GLdouble * v ), (index, v)) \
	FUNC(void , glVertexAttribLPointer, GLVERTEXATTRIBLPOINTER, (GLuint index , GLint size , GLenum type , GLsizei stride , const GLvoid * pointer ), (index, size, type, stride, pointer)) \
	FUNC(void , glGetVertexAttribLdv, GLGETVERTEXATTRIBLDV, (GLuint index , GLenum pname , GLdouble * params ), (index, pname, params)) \
	END()
#else
#define EXTENSION_GL_ARB_vertex_attrib_64bit(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_vertex_blend
#define GL_ARB_vertex_blend 1
#define EXTENSION_GL_ARB_vertex_blend(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_vertex_blend) \
	CONST(int, GL_MAX_VERTEX_UNITS_ARB, 0x86A4) \
	CONST(int, GL_ACTIVE_VERTEX_UNITS_ARB, 0x86A5) \
	CONST(int, GL_WEIGHT_SUM_UNITY_ARB, 0x86A6) \
	CONST(int, GL_VERTEX_BLEND_ARB, 0x86A7) \
	CONST(int, GL_CURRENT_WEIGHT_ARB, 0x86A8) \
	CONST(int, GL_WEIGHT_ARRAY_TYPE_ARB, 0x86A9) \
	CONST(int, GL_WEIGHT_ARRAY_STRIDE_ARB, 0x86AA) \
	CONST(int, GL_WEIGHT_ARRAY_SIZE_ARB, 0x86AB) \
	CONST(int, GL_WEIGHT_ARRAY_POINTER_ARB, 0x86AC) \
	CONST(int, GL_WEIGHT_ARRAY_ARB, 0x86AD) \
	CONST(int, GL_MODELVIEW0_ARB, 0x1700) \
	CONST(int, GL_MODELVIEW1_ARB, 0x850A) \
	CONST(int, GL_MODELVIEW2_ARB, 0x8722) \
	CONST(int, GL_MODELVIEW3_ARB, 0x8723) \
	CONST(int, GL_MODELVIEW4_ARB, 0x8724) \
	CONST(int, GL_MODELVIEW5_ARB, 0x8725) \
	CONST(int, GL_MODELVIEW6_ARB, 0x8726) \
	CONST(int, GL_MODELVIEW7_ARB, 0x8727) \
	CONST(int, GL_MODELVIEW8_ARB, 0x8728) \
	CONST(int, GL_MODELVIEW9_ARB, 0x8729) \
	CONST(int, GL_MODELVIEW10_ARB, 0x872A) \
	CONST(int, GL_MODELVIEW11_ARB, 0x872B) \
	CONST(int, GL_MODELVIEW12_ARB, 0x872C) \
	CONST(int, GL_MODELVIEW13_ARB, 0x872D) \
	CONST(int, GL_MODELVIEW14_ARB, 0x872E) \
	CONST(int, GL_MODELVIEW15_ARB, 0x872F) \
	CONST(int, GL_MODELVIEW16_ARB, 0x8730) \
	CONST(int, GL_MODELVIEW17_ARB, 0x8731) \
	CONST(int, GL_MODELVIEW18_ARB, 0x8732) \
	CONST(int, GL_MODELVIEW19_ARB, 0x8733) \
	CONST(int, GL_MODELVIEW20_ARB, 0x8734) \
	CONST(int, GL_MODELVIEW21_ARB, 0x8735) \
	CONST(int, GL_MODELVIEW22_ARB, 0x8736) \
	CONST(int, GL_MODELVIEW23_ARB, 0x8737) \
	CONST(int, GL_MODELVIEW24_ARB, 0x8738) \
	CONST(int, GL_MODELVIEW25_ARB, 0x8739) \
	CONST(int, GL_MODELVIEW26_ARB, 0x873A) \
	CONST(int, GL_MODELVIEW27_ARB, 0x873B) \
	CONST(int, GL_MODELVIEW28_ARB, 0x873C) \
	CONST(int, GL_MODELVIEW29_ARB, 0x873D) \
	CONST(int, GL_MODELVIEW30_ARB, 0x873E) \
	CONST(int, GL_MODELVIEW31_ARB, 0x873F) \
	FUNC(void , glWeightbvARB, GLWEIGHTBVARB, (GLint size , const GLbyte * weights ), (size, weights)) \
	FUNC(void , glWeightsvARB, GLWEIGHTSVARB, (GLint size , const GLshort * weights ), (size, weights)) \
	FUNC(void , glWeightivARB, GLWEIGHTIVARB, (GLint size , const GLint * weights ), (size, weights)) \
	FUNC(void , glWeightfvARB, GLWEIGHTFVARB, (GLint size , const GLfloat * weights ), (size, weights)) \
	FUNC(void , glWeightdvARB, GLWEIGHTDVARB, (GLint size , const GLdouble * weights ), (size, weights)) \
	FUNC(void , glWeightubvARB, GLWEIGHTUBVARB, (GLint size , const GLubyte * weights ), (size, weights)) \
	FUNC(void , glWeightusvARB, GLWEIGHTUSVARB, (GLint size , const GLushort * weights ), (size, weights)) \
	FUNC(void , glWeightuivARB, GLWEIGHTUIVARB, (GLint size , const GLuint * weights ), (size, weights)) \
	FUNC(void , glWeightPointerARB, GLWEIGHTPOINTERARB, (GLint size , GLenum type , GLsizei stride , const GLvoid * pointer ), (size, type, stride, pointer)) \
	FUNC(void , glVertexBlendARB, GLVERTEXBLENDARB, (GLint count ), (count)) \
	END()
#else
#define EXTENSION_GL_ARB_vertex_blend(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_vertex_buffer_object
#define GL_ARB_vertex_buffer_object 1
#define EXTENSION_GL_ARB_vertex_buffer_object(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_vertex_buffer_object) \
	CONST(int, GL_BUFFER_SIZE_ARB, 0x8764) \
	CONST(int, GL_BUFFER_USAGE_ARB, 0x8765) \
	CONST(int, GL_ARRAY_BUFFER_ARB, 0x8892) \
	CONST(int, GL_ELEMENT_ARRAY_BUFFER_ARB, 0x8893) \
	CONST(int, GL_ARRAY_BUFFER_BINDING_ARB, 0x8894) \
	CONST(int, GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB, 0x8895) \
	CONST(int, GL_VERTEX_ARRAY_BUFFER_BINDING_ARB, 0x8896) \
	CONST(int, GL_NORMAL_ARRAY_BUFFER_BINDING_ARB, 0x8897) \
	CONST(int, GL_COLOR_ARRAY_BUFFER_BINDING_ARB, 0x8898) \
	CONST(int, GL_INDEX_ARRAY_BUFFER_BINDING_ARB, 0x8899) \
	CONST(int, GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB, 0x889A) \
	CONST(int, GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB, 0x889B) \
	CONST(int, GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB, 0x889C) \
	CONST(int, GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB, 0x889D) \
	CONST(int, GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB, 0x889E) \
	CONST(int, GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB, 0x889F) \
	CONST(int, GL_READ_ONLY_ARB, 0x88B8) \
	CONST(int, GL_WRITE_ONLY_ARB, 0x88B9) \
	CONST(int, GL_READ_WRITE_ARB, 0x88BA) \
	CONST(int, GL_BUFFER_ACCESS_ARB, 0x88BB) \
	CONST(int, GL_BUFFER_MAPPED_ARB, 0x88BC) \
	CONST(int, GL_BUFFER_MAP_POINTER_ARB, 0x88BD) \
	CONST(int, GL_STREAM_DRAW_ARB, 0x88E0) \
	CONST(int, GL_STREAM_READ_ARB, 0x88E1) \
	CONST(int, GL_STREAM_COPY_ARB, 0x88E2) \
	CONST(int, GL_STATIC_DRAW_ARB, 0x88E4) \
	CONST(int, GL_STATIC_READ_ARB, 0x88E5) \
	CONST(int, GL_STATIC_COPY_ARB, 0x88E6) \
	CONST(int, GL_DYNAMIC_DRAW_ARB, 0x88E8) \
	CONST(int, GL_DYNAMIC_READ_ARB, 0x88E9) \
	CONST(int, GL_DYNAMIC_COPY_ARB, 0x88EA) \
	FUNC(void , glBindBufferARB, GLBINDBUFFERARB, (GLenum target , GLuint buffer ), (target, buffer)) \
	FUNC(void , glDeleteBuffersARB, GLDELETEBUFFERSARB, (GLsizei n , const GLuint * buffers ), (n, buffers)) \
	FUNC(void , glGenBuffersARB, GLGENBUFFERSARB, (GLsizei n , GLuint * buffers ), (n, buffers)) \
	FUNC(GLboolean , glIsBufferARB, GLISBUFFERARB, (GLuint buffer ), (buffer)) \
	FUNC(void , glBufferDataARB, GLBUFFERDATAARB, (GLenum target , GLsizeiptrARB size , const GLvoid * data , GLenum usage ), (target, size, data, usage)) \
	FUNC(void , glBufferSubDataARB, GLBUFFERSUBDATAARB, (GLenum target , GLintptrARB offset , GLsizeiptrARB size , const GLvoid * data ), (target, offset, size, data)) \
	FUNC(void , glGetBufferSubDataARB, GLGETBUFFERSUBDATAARB, (GLenum target , GLintptrARB offset , GLsizeiptrARB size , GLvoid * data ), (target, offset, size, data)) \
	FUNC(GLvoid * , glMapBufferARB, GLMAPBUFFERARB, (GLenum target , GLenum access ), (target, access)) \
	FUNC(GLboolean , glUnmapBufferARB, GLUNMAPBUFFERARB, (GLenum target ), (target)) \
	FUNC(void , glGetBufferParameterivARB, GLGETBUFFERPARAMETERIVARB, (GLenum target , GLenum pname , GLint * params ), (target, pname, params)) \
	FUNC(void , glGetBufferPointervARB, GLGETBUFFERPOINTERVARB, (GLenum target , GLenum pname , GLvoid * * params ), (target, pname, params)) \
	END()
#else
#define EXTENSION_GL_ARB_vertex_buffer_object(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_vertex_program
#define GL_ARB_vertex_program 1
#define EXTENSION_GL_ARB_vertex_program(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_vertex_program) \
	CONST(int, GL_COLOR_SUM_ARB, 0x8458) \
	CONST(int, GL_VERTEX_PROGRAM_ARB, 0x8620) \
	CONST(int, GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB, 0x8622) \
	CONST(int, GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB, 0x8623) \
	CONST(int, GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB, 0x8624) \
	CONST(int, GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB, 0x8625) \
	CONST(int, GL_CURRENT_VERTEX_ATTRIB_ARB, 0x8626) \
	CONST(int, GL_PROGRAM_LENGTH_ARB, 0x8627) \
	CONST(int, GL_PROGRAM_STRING_ARB, 0x8628) \
	CONST(int, GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB, 0x862E) \
	CONST(int, GL_MAX_PROGRAM_MATRICES_ARB, 0x862F) \
	CONST(int, GL_CURRENT_MATRIX_STACK_DEPTH_ARB, 0x8640) \
	CONST(int, GL_CURRENT_MATRIX_ARB, 0x8641) \
	CONST(int, GL_VERTEX_PROGRAM_POINT_SIZE_ARB, 0x8642) \
	CONST(int, GL_VERTEX_PROGRAM_TWO_SIDE_ARB, 0x8643) \
	CONST(int, GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB, 0x8645) \
	CONST(int, GL_PROGRAM_ERROR_POSITION_ARB, 0x864B) \
	CONST(int, GL_PROGRAM_BINDING_ARB, 0x8677) \
	CONST(int, GL_MAX_VERTEX_ATTRIBS_ARB, 0x8869) \
	CONST(int, GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB, 0x886A) \
	CONST(int, GL_PROGRAM_ERROR_STRING_ARB, 0x8874) \
	CONST(int, GL_PROGRAM_FORMAT_ASCII_ARB, 0x8875) \
	CONST(int, GL_PROGRAM_FORMAT_ARB, 0x8876) \
	CONST(int, GL_PROGRAM_INSTRUCTIONS_ARB, 0x88A0) \
	CONST(int, GL_MAX_PROGRAM_INSTRUCTIONS_ARB, 0x88A1) \
	CONST(int, GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB, 0x88A2) \
	CONST(int, GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB, 0x88A3) \
	CONST(int, GL_PROGRAM_TEMPORARIES_ARB, 0x88A4) \
	CONST(int, GL_MAX_PROGRAM_TEMPORARIES_ARB, 0x88A5) \
	CONST(int, GL_PROGRAM_NATIVE_TEMPORARIES_ARB, 0x88A6) \
	CONST(int, GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB, 0x88A7) \
	CONST(int, GL_PROGRAM_PARAMETERS_ARB, 0x88A8) \
	CONST(int, GL_MAX_PROGRAM_PARAMETERS_ARB, 0x88A9) \
	CONST(int, GL_PROGRAM_NATIVE_PARAMETERS_ARB, 0x88AA) \
	CONST(int, GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB, 0x88AB) \
	CONST(int, GL_PROGRAM_ATTRIBS_ARB, 0x88AC) \
	CONST(int, GL_MAX_PROGRAM_ATTRIBS_ARB, 0x88AD) \
	CONST(int, GL_PROGRAM_NATIVE_ATTRIBS_ARB, 0x88AE) \
	CONST(int, GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB, 0x88AF) \
	CONST(int, GL_PROGRAM_ADDRESS_REGISTERS_ARB, 0x88B0) \
	CONST(int, GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB, 0x88B1) \
	CONST(int, GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB, 0x88B2) \
	CONST(int, GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB, 0x88B3) \
	CONST(int, GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB, 0x88B4) \
	CONST(int, GL_MAX_PROGRAM_ENV_PARAMETERS_ARB, 0x88B5) \
	CONST(int, GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB, 0x88B6) \
	CONST(int, GL_TRANSPOSE_CURRENT_MATRIX_ARB, 0x88B7) \
	CONST(int, GL_MATRIX0_ARB, 0x88C0) \
	CONST(int, GL_MATRIX1_ARB, 0x88C1) \
	CONST(int, GL_MATRIX2_ARB, 0x88C2) \
	CONST(int, GL_MATRIX3_ARB, 0x88C3) \
	CONST(int, GL_MATRIX4_ARB, 0x88C4) \
	CONST(int, GL_MATRIX5_ARB, 0x88C5) \
	CONST(int, GL_MATRIX6_ARB, 0x88C6) \
	CONST(int, GL_MATRIX7_ARB, 0x88C7) \
	CONST(int, GL_MATRIX8_ARB, 0x88C8) \
	CONST(int, GL_MATRIX9_ARB, 0x88C9) \
	CONST(int, GL_MATRIX10_ARB, 0x88CA) \
	CONST(int, GL_MATRIX11_ARB, 0x88CB) \
	CONST(int, GL_MATRIX12_ARB, 0x88CC) \
	CONST(int, GL_MATRIX13_ARB, 0x88CD) \
	CONST(int, GL_MATRIX14_ARB, 0x88CE) \
	CONST(int, GL_MATRIX15_ARB, 0x88CF) \
	CONST(int, GL_MATRIX16_ARB, 0x88D0) \
	CONST(int, GL_MATRIX17_ARB, 0x88D1) \
	CONST(int, GL_MATRIX18_ARB, 0x88D2) \
	CONST(int, GL_MATRIX19_ARB, 0x88D3) \
	CONST(int, GL_MATRIX20_ARB, 0x88D4) \
	CONST(int, GL_MATRIX21_ARB, 0x88D5) \
	CONST(int, GL_MATRIX22_ARB, 0x88D6) \
	CONST(int, GL_MATRIX23_ARB, 0x88D7) \
	CONST(int, GL_MATRIX24_ARB, 0x88D8) \
	CONST(int, GL_MATRIX25_ARB, 0x88D9) \
	CONST(int, GL_MATRIX26_ARB, 0x88DA) \
	CONST(int, GL_MATRIX27_ARB, 0x88DB) \
	CONST(int, GL_MATRIX28_ARB, 0x88DC) \
	CONST(int, GL_MATRIX29_ARB, 0x88DD) \
	CONST(int, GL_MATRIX30_ARB, 0x88DE) \
	CONST(int, GL_MATRIX31_ARB, 0x88DF) \
	FUNC(void , glVertexAttrib1dARB, GLVERTEXATTRIB1DARB, (GLuint index , GLdouble x ), (index, x)) \
	FUNC(void , glVertexAttrib1dvARB, GLVERTEXATTRIB1DVARB, (GLuint index , const GLdouble * v ), (index, v)) \
	FUNC(void , glVertexAttrib1fARB, GLVERTEXATTRIB1FARB, (GLuint index , GLfloat x ), (index, x)) \
	FUNC(void , glVertexAttrib1fvARB, GLVERTEXATTRIB1FVARB, (GLuint index , const GLfloat * v ), (index, v)) \
	FUNC(void , glVertexAttrib1sARB, GLVERTEXATTRIB1SARB, (GLuint index , GLshort x ), (index, x)) \
	FUNC(void , glVertexAttrib1svARB, GLVERTEXATTRIB1SVARB, (GLuint index , const GLshort * v ), (index, v)) \
	FUNC(void , glVertexAttrib2dARB, GLVERTEXATTRIB2DARB, (GLuint index , GLdouble x , GLdouble y ), (index, x, y)) \
	FUNC(void , glVertexAttrib2dvARB, GLVERTEXATTRIB2DVARB, (GLuint index , const GLdouble * v ), (index, v)) \
	FUNC(void , glVertexAttrib2fARB, GLVERTEXATTRIB2FARB, (GLuint index , GLfloat x , GLfloat y ), (index, x, y)) \
	FUNC(void , glVertexAttrib2fvARB, GLVERTEXATTRIB2FVARB, (GLuint index , const GLfloat * v ), (index, v)) \
	FUNC(void , glVertexAttrib2sARB, GLVERTEXATTRIB2SARB, (GLuint index , GLshort x , GLshort y ), (index, x, y)) \
	FUNC(void , glVertexAttrib2svARB, GLVERTEXATTRIB2SVARB, (GLuint index , const GLshort * v ), (index, v)) \
	FUNC(void , glVertexAttrib3dARB, GLVERTEXATTRIB3DARB, (GLuint index , GLdouble x , GLdouble y , GLdouble z ), (index, x, y, z)) \
	FUNC(void , glVertexAttrib3dvARB, GLVERTEXATTRIB3DVARB, (GLuint index , const GLdouble * v ), (index, v)) \
	FUNC(void , glVertexAttrib3fARB, GLVERTEXATTRIB3FARB, (GLuint index , GLfloat x , GLfloat y , GLfloat z ), (index, x, y, z)) \
	FUNC(void , glVertexAttrib3fvARB, GLVERTEXATTRIB3FVARB, (GLuint index , const GLfloat * v ), (index, v)) \
	FUNC(void , glVertexAttrib3sARB, GLVERTEXATTRIB3SARB, (GLuint index , GLshort x , GLshort y , GLshort z ), (index, x, y, z)) \
	FUNC(void , glVertexAttrib3svARB, GLVERTEXATTRIB3SVARB, (GLuint index , const GLshort * v ), (index, v)) \
	FUNC(void , glVertexAttrib4NbvARB, GLVERTEXATTRIB4NBVARB, (GLuint index , const GLbyte * v ), (index, v)) \
	FUNC(void , glVertexAttrib4NivARB, GLVERTEXATTRIB4NIVARB, (GLuint index , const GLint * v ), (index, v)) \
	FUNC(void , glVertexAttrib4NsvARB, GLVERTEXATTRIB4NSVARB, (GLuint index , const GLshort * v ), (index, v)) \
	FUNC(void , glVertexAttrib4NubARB, GLVERTEXATTRIB4NUBARB, (GLuint index , GLubyte x , GLubyte y , GLubyte z , GLubyte w ), (index, x, y, z, w)) \
	FUNC(void , glVertexAttrib4NubvARB, GLVERTEXATTRIB4NUBVARB, (GLuint index , const GLubyte * v ), (index, v)) \
	FUNC(void , glVertexAttrib4NuivARB, GLVERTEXATTRIB4NUIVARB, (GLuint index , const GLuint * v ), (index, v)) \
	FUNC(void , glVertexAttrib4NusvARB, GLVERTEXATTRIB4NUSVARB, (GLuint index , const GLushort * v ), (index, v)) \
	FUNC(void , glVertexAttrib4bvARB, GLVERTEXATTRIB4BVARB, (GLuint index , const GLbyte * v ), (index, v)) \
	FUNC(void , glVertexAttrib4dARB, GLVERTEXATTRIB4DARB, (GLuint index , GLdouble x , GLdouble y , GLdouble z , GLdouble w ), (index, x, y, z, w)) \
	FUNC(void , glVertexAttrib4dvARB, GLVERTEXATTRIB4DVARB, (GLuint index , const GLdouble * v ), (index, v)) \
	FUNC(void , glVertexAttrib4fARB, GLVERTEXATTRIB4FARB, (GLuint index , GLfloat x , GLfloat y , GLfloat z , GLfloat w ), (index, x, y, z, w)) \
	FUNC(void , glVertexAttrib4fvARB, GLVERTEXATTRIB4FVARB, (GLuint index , const GLfloat * v ), (index, v)) \
	FUNC(void , glVertexAttrib4ivARB, GLVERTEXATTRIB4IVARB, (GLuint index , const GLint * v ), (index, v)) \
	FUNC(void , glVertexAttrib4sARB, GLVERTEXATTRIB4SARB, (GLuint index , GLshort x , GLshort y , GLshort z , GLshort w ), (index, x, y, z, w)) \
	FUNC(void , glVertexAttrib4svARB, GLVERTEXATTRIB4SVARB, (GLuint index , const GLshort * v ), (index, v)) \
	FUNC(void , glVertexAttrib4ubvARB, GLVERTEXATTRIB4UBVARB, (GLuint index , const GLubyte * v ), (index, v)) \
	FUNC(void , glVertexAttrib4uivARB, GLVERTEXATTRIB4UIVARB, (GLuint index , const GLuint * v ), (index, v)) \
	FUNC(void , glVertexAttrib4usvARB, GLVERTEXATTRIB4USVARB, (GLuint index , const GLushort * v ), (index, v)) \
	FUNC(void , glVertexAttribPointerARB, GLVERTEXATTRIBPOINTERARB, (GLuint index , GLint size , GLenum type , GLboolean normalized , GLsizei stride , const GLvoid * pointer ), (index, size, type, normalized, stride, pointer)) \
	FUNC(void , glEnableVertexAttribArrayARB, GLENABLEVERTEXATTRIBARRAYARB, (GLuint index ), (index)) \
	FUNC(void , glDisableVertexAttribArrayARB, GLDISABLEVERTEXATTRIBARRAYARB, (GLuint index ), (index)) \
	FUNC(void , glProgramStringARB, GLPROGRAMSTRINGARB, (GLenum target , GLenum format , GLsizei len , const GLvoid * string ), (target, format, len, string)) \
	FUNC(void , glBindProgramARB, GLBINDPROGRAMARB, (GLenum target , GLuint program ), (target, program)) \
	FUNC(void , glDeleteProgramsARB, GLDELETEPROGRAMSARB, (GLsizei n , const GLuint * programs ), (n, programs)) \
	FUNC(void , glGenProgramsARB, GLGENPROGRAMSARB, (GLsizei n , GLuint * programs ), (n, programs)) \
	FUNC(void , glProgramEnvParameter4dARB, GLPROGRAMENVPARAMETER4DARB, (GLenum target , GLuint index , GLdouble x , GLdouble y , GLdouble z , GLdouble w ), (target, index, x, y, z, w)) \
	FUNC(void , glProgramEnvParameter4dvARB, GLPROGRAMENVPARAMETER4DVARB, (GLenum target , GLuint index , const GLdouble * params ), (target, index, params)) \
	FUNC(void , glProgramEnvParameter4fARB, GLPROGRAMENVPARAMETER4FARB, (GLenum target , GLuint index , GLfloat x , GLfloat y , GLfloat z , GLfloat w ), (target, index, x, y, z, w)) \
	FUNC(void , glProgramEnvParameter4fvARB, GLPROGRAMENVPARAMETER4FVARB, (GLenum target , GLuint index , const GLfloat * params ), (target, index, params)) \
	FUNC(void , glProgramLocalParameter4dARB, GLPROGRAMLOCALPARAMETER4DARB, (GLenum target , GLuint index , GLdouble x , GLdouble y , GLdouble z , GLdouble w ), (target, index, x, y, z, w)) \
	FUNC(void , glProgramLocalParameter4dvARB, GLPROGRAMLOCALPARAMETER4DVARB, (GLenum target , GLuint index , const GLdouble * params ), (target, index, params)) \
	FUNC(void , glProgramLocalParameter4fARB, GLPROGRAMLOCALPARAMETER4FARB, (GLenum target , GLuint index , GLfloat x , GLfloat y , GLfloat z , GLfloat w ), (target, index, x, y, z, w)) \
	FUNC(void , glProgramLocalParameter4fvARB, GLPROGRAMLOCALPARAMETER4FVARB, (GLenum target , GLuint index , const GLfloat * params ), (target, index, params)) \
	FUNC(void , glGetProgramEnvParameterdvARB, GLGETPROGRAMENVPARAMETERDVARB, (GLenum target , GLuint index , GLdouble * params ), (target, index, params)) \
	FUNC(void , glGetProgramEnvParameterfvARB, GLGETPROGRAMENVPARAMETERFVARB, (GLenum target , GLuint index , GLfloat * params ), (target, index, params)) \
	FUNC(void , glGetProgramLocalParameterdvARB, GLGETPROGRAMLOCALPARAMETERDVARB, (GLenum target , GLuint index , GLdouble * params ), (target, index, params)) \
	FUNC(void , glGetProgramLocalParameterfvARB, GLGETPROGRAMLOCALPARAMETERFVARB, (GLenum target , GLuint index , GLfloat * params ), (target, index, params)) \
	FUNC(void , glGetProgramivARB, GLGETPROGRAMIVARB, (GLenum target , GLenum pname , GLint * params ), (target, pname, params)) \
	FUNC(void , glGetProgramStringARB, GLGETPROGRAMSTRINGARB, (GLenum target , GLenum pname , GLvoid * string ), (target, pname, string)) \
	FUNC(void , glGetVertexAttribdvARB, GLGETVERTEXATTRIBDVARB, (GLuint index , GLenum pname , GLdouble * params ), (index, pname, params)) \
	FUNC(void , glGetVertexAttribfvARB, GLGETVERTEXATTRIBFVARB, (GLuint index , GLenum pname , GLfloat * params ), (index, pname, params)) \
	FUNC(void , glGetVertexAttribivARB, GLGETVERTEXATTRIBIVARB, (GLuint index , GLenum pname , GLint * params ), (index, pname, params)) \
	FUNC(void , glGetVertexAttribPointervARB, GLGETVERTEXATTRIBPOINTERVARB, (GLuint index , GLenum pname , GLvoid * * pointer ), (index, pname, pointer)) \
	FUNC(GLboolean , glIsProgramARB, GLISPROGRAMARB, (GLuint program ), (program)) \
	END()
#else
#define EXTENSION_GL_ARB_vertex_program(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_vertex_shader
#define GL_ARB_vertex_shader 1
#define EXTENSION_GL_ARB_vertex_shader(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_vertex_shader) \
	CONST(int, GL_VERTEX_SHADER_ARB, 0x8B31) \
	CONST(int, GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB, 0x8B4A) \
	CONST(int, GL_MAX_VARYING_FLOATS_ARB, 0x8B4B) \
	CONST(int, GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB, 0x8B4C) \
	CONST(int, GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB, 0x8B4D) \
	CONST(int, GL_OBJECT_ACTIVE_ATTRIBUTES_ARB, 0x8B89) \
	CONST(int, GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB, 0x8B8A) \
	FUNC(void , glBindAttribLocationARB, GLBINDATTRIBLOCATIONARB, (GLhandleARB programObj , GLuint index , const GLcharARB * name ), (programObj, index, name)) \
	FUNC(void , glGetActiveAttribARB, GLGETACTIVEATTRIBARB, (GLhandleARB programObj , GLuint index , GLsizei maxLength , GLsizei * length , GLint * size , GLenum * type , GLcharARB * name ), (programObj, index, maxLength, length, size, type, name)) \
	FUNC(GLint , glGetAttribLocationARB, GLGETATTRIBLOCATIONARB, (GLhandleARB programObj , const GLcharARB * name ), (programObj, name)) \
	END()
#else
#define EXTENSION_GL_ARB_vertex_shader(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_vertex_type_2_10_10_10_rev
#define GL_ARB_vertex_type_2_10_10_10_rev 1
#define EXTENSION_GL_ARB_vertex_type_2_10_10_10_rev(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_vertex_type_2_10_10_10_rev) \
	CONST(int, GL_INT_2_10_10_10_REV, 0x8D9F) \
	FUNC(void , glVertexP2ui, GLVERTEXP2UI, (GLenum type , GLuint value ), (type, value)) \
	FUNC(void , glVertexP2uiv, GLVERTEXP2UIV, (GLenum type , const GLuint * value ), (type, value)) \
	FUNC(void , glVertexP3ui, GLVERTEXP3UI, (GLenum type , GLuint value ), (type, value)) \
	FUNC(void , glVertexP3uiv, GLVERTEXP3UIV, (GLenum type , const GLuint * value ), (type, value)) \
	FUNC(void , glVertexP4ui, GLVERTEXP4UI, (GLenum type , GLuint value ), (type, value)) \
	FUNC(void , glVertexP4uiv, GLVERTEXP4UIV, (GLenum type , const GLuint * value ), (type, value)) \
	FUNC(void , glTexCoordP1ui, GLTEXCOORDP1UI, (GLenum type , GLuint coords ), (type, coords)) \
	FUNC(void , glTexCoordP1uiv, GLTEXCOORDP1UIV, (GLenum type , const GLuint * coords ), (type, coords)) \
	FUNC(void , glTexCoordP2ui, GLTEXCOORDP2UI, (GLenum type , GLuint coords ), (type, coords)) \
	FUNC(void , glTexCoordP2uiv, GLTEXCOORDP2UIV, (GLenum type , const GLuint * coords ), (type, coords)) \
	FUNC(void , glTexCoordP3ui, GLTEXCOORDP3UI, (GLenum type , GLuint coords ), (type, coords)) \
	FUNC(void , glTexCoordP3uiv, GLTEXCOORDP3UIV, (GLenum type , const GLuint * coords ), (type, coords)) \
	FUNC(void , glTexCoordP4ui, GLTEXCOORDP4UI, (GLenum type , GLuint coords ), (type, coords)) \
	FUNC(void , glTexCoordP4uiv, GLTEXCOORDP4UIV, (GLenum type , const GLuint * coords ), (type, coords)) \
	FUNC(void , glMultiTexCoordP1ui, GLMULTITEXCOORDP1UI, (GLenum texture , GLenum type , GLuint coords ), (texture, type, coords)) \
	FUNC(void , glMultiTexCoordP1uiv, GLMULTITEXCOORDP1UIV, (GLenum texture , GLenum type , const GLuint * coords ), (texture, type, coords)) \
	FUNC(void , glMultiTexCoordP2ui, GLMULTITEXCOORDP2UI, (GLenum texture , GLenum type , GLuint coords ), (texture, type, coords)) \
	FUNC(void , glMultiTexCoordP2uiv, GLMULTITEXCOORDP2UIV, (GLenum texture , GLenum type , const GLuint * coords ), (texture, type, coords)) \
	FUNC(void , glMultiTexCoordP3ui, GLMULTITEXCOORDP3UI, (GLenum texture , GLenum type , GLuint coords ), (texture, type, coords)) \
	FUNC(void , glMultiTexCoordP3uiv, GLMULTITEXCOORDP3UIV, (GLenum texture , GLenum type , const GLuint * coords ), (texture, type, coords)) \
	FUNC(void , glMultiTexCoordP4ui, GLMULTITEXCOORDP4UI, (GLenum texture , GLenum type , GLuint coords ), (texture, type, coords)) \
	FUNC(void , glMultiTexCoordP4uiv, GLMULTITEXCOORDP4UIV, (GLenum texture , GLenum type , const GLuint * coords ), (texture, type, coords)) \
	FUNC(void , glNormalP3ui, GLNORMALP3UI, (GLenum type , GLuint coords ), (type, coords)) \
	FUNC(void , glNormalP3uiv, GLNORMALP3UIV, (GLenum type , const GLuint * coords ), (type, coords)) \
	FUNC(void , glColorP3ui, GLCOLORP3UI, (GLenum type , GLuint color ), (type, color)) \
	FUNC(void , glColorP3uiv, GLCOLORP3UIV, (GLenum type , const GLuint * color ), (type, color)) \
	FUNC(void , glColorP4ui, GLCOLORP4UI, (GLenum type , GLuint color ), (type, color)) \
	FUNC(void , glColorP4uiv, GLCOLORP4UIV, (GLenum type , const GLuint * color ), (type, color)) \
	FUNC(void , glSecondaryColorP3ui, GLSECONDARYCOLORP3UI, (GLenum type , GLuint color ), (type, color)) \
	FUNC(void , glSecondaryColorP3uiv, GLSECONDARYCOLORP3UIV, (GLenum type , const GLuint * color ), (type, color)) \
	FUNC(void , glVertexAttribP1ui, GLVERTEXATTRIBP1UI, (GLuint index , GLenum type , GLboolean normalized , GLuint value ), (index, type, normalized, value)) \
	FUNC(void , glVertexAttribP1uiv, GLVERTEXATTRIBP1UIV, (GLuint index , GLenum type , GLboolean normalized , const GLuint * value ), (index, type, normalized, value)) \
	FUNC(void , glVertexAttribP2ui, GLVERTEXATTRIBP2UI, (GLuint index , GLenum type , GLboolean normalized , GLuint value ), (index, type, normalized, value)) \
	FUNC(void , glVertexAttribP2uiv, GLVERTEXATTRIBP2UIV, (GLuint index , GLenum type , GLboolean normalized , const GLuint * value ), (index, type, normalized, value)) \
	FUNC(void , glVertexAttribP3ui, GLVERTEXATTRIBP3UI, (GLuint index , GLenum type , GLboolean normalized , GLuint value ), (index, type, normalized, value)) \
	FUNC(void , glVertexAttribP3uiv, GLVERTEXATTRIBP3UIV, (GLuint index , GLenum type , GLboolean normalized , const GLuint * value ), (index, type, normalized, value)) \
	FUNC(void , glVertexAttribP4ui, GLVERTEXATTRIBP4UI, (GLuint index , GLenum type , GLboolean normalized , GLuint value ), (index, type, normalized, value)) \
	FUNC(void , glVertexAttribP4uiv, GLVERTEXATTRIBP4UIV, (GLuint index , GLenum type , GLboolean normalized , const GLuint * value ), (index, type, normalized, value)) \
	END()
#else
#define EXTENSION_GL_ARB_vertex_type_2_10_10_10_rev(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_viewport_array
#define GL_ARB_viewport_array 1
#define EXTENSION_GL_ARB_viewport_array(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_viewport_array) \
	CONST(int, GL_MAX_VIEWPORTS, 0x825B) \
	CONST(int, GL_VIEWPORT_SUBPIXEL_BITS, 0x825C) \
	CONST(int, GL_VIEWPORT_BOUNDS_RANGE, 0x825D) \
	CONST(int, GL_LAYER_PROVOKING_VERTEX, 0x825E) \
	CONST(int, GL_VIEWPORT_INDEX_PROVOKING_VERTEX, 0x825F) \
	CONST(int, GL_UNDEFINED_VERTEX, 0x8260) \
	FUNC(void , glViewportArrayv, GLVIEWPORTARRAYV, (GLuint first , GLsizei count , const GLfloat * v ), (first, count, v)) \
	FUNC(void , glViewportIndexedf, GLVIEWPORTINDEXEDF, (GLuint index , GLfloat x , GLfloat y , GLfloat w , GLfloat h ), (index, x, y, w, h)) \
	FUNC(void , glViewportIndexedfv, GLVIEWPORTINDEXEDFV, (GLuint index , const GLfloat * v ), (index, v)) \
	FUNC(void , glScissorArrayv, GLSCISSORARRAYV, (GLuint first , GLsizei count , const GLint * v ), (first, count, v)) \
	FUNC(void , glScissorIndexed, GLSCISSORINDEXED, (GLuint index , GLint left , GLint bottom , GLsizei width , GLsizei height ), (index, left, bottom, width, height)) \
	FUNC(void , glScissorIndexedv, GLSCISSORINDEXEDV, (GLuint index , const GLint * v ), (index, v)) \
	FUNC(void , glDepthRangeArrayv, GLDEPTHRANGEARRAYV, (GLuint first , GLsizei count , const GLclampd * v ), (first, count, v)) \
	FUNC(void , glDepthRangeIndexed, GLDEPTHRANGEINDEXED, (GLuint index , GLclampd n , GLclampd f ), (index, n, f)) \
	FUNC(void , glGetFloati_v, GLGETFLOATI_V, (GLenum target , GLuint index , GLfloat * data ), (target, index, data)) \
	FUNC(void , glGetDoublei_v, GLGETDOUBLEI_V, (GLenum target , GLuint index , GLdouble * data ), (target, index, data)) \
	END()
#else
#define EXTENSION_GL_ARB_viewport_array(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ARB_window_pos
#define GL_ARB_window_pos 1
#define EXTENSION_GL_ARB_window_pos(NAME, FUNC, CONST, END) \
	NAME(GL_ARB_window_pos) \
	FUNC(void , glWindowPos2dARB, GLWINDOWPOS2DARB, (GLdouble x , GLdouble y ), (x, y)) \
	FUNC(void , glWindowPos2dvARB, GLWINDOWPOS2DVARB, (const GLdouble * v ), (v)) \
	FUNC(void , glWindowPos2fARB, GLWINDOWPOS2FARB, (GLfloat x , GLfloat y ), (x, y)) \
	FUNC(void , glWindowPos2fvARB, GLWINDOWPOS2FVARB, (const GLfloat * v ), (v)) \
	FUNC(void , glWindowPos2iARB, GLWINDOWPOS2IARB, (GLint x , GLint y ), (x, y)) \
	FUNC(void , glWindowPos2ivARB, GLWINDOWPOS2IVARB, (const GLint * v ), (v)) \
	FUNC(void , glWindowPos2sARB, GLWINDOWPOS2SARB, (GLshort x , GLshort y ), (x, y)) \
	FUNC(void , glWindowPos2svARB, GLWINDOWPOS2SVARB, (const GLshort * v ), (v)) \
	FUNC(void , glWindowPos3dARB, GLWINDOWPOS3DARB, (GLdouble x , GLdouble y , GLdouble z ), (x, y, z)) \
	FUNC(void , glWindowPos3dvARB, GLWINDOWPOS3DVARB, (const GLdouble * v ), (v)) \
	FUNC(void , glWindowPos3fARB, GLWINDOWPOS3FARB, (GLfloat x , GLfloat y , GLfloat z ), (x, y, z)) \
	FUNC(void , glWindowPos3fvARB, GLWINDOWPOS3FVARB, (const GLfloat * v ), (v)) \
	FUNC(void , glWindowPos3iARB, GLWINDOWPOS3IARB, (GLint x , GLint y , GLint z ), (x, y, z)) \
	FUNC(void , glWindowPos3ivARB, GLWINDOWPOS3IVARB, (const GLint * v ), (v)) \
	FUNC(void , glWindowPos3sARB, GLWINDOWPOS3SARB, (GLshort x , GLshort y , GLshort z ), (x, y, z)) \
	FUNC(void , glWindowPos3svARB, GLWINDOWPOS3SVARB, (const GLshort * v ), (v)) \
	END()
#else
#define EXTENSION_GL_ARB_window_pos(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ATI_draw_buffers
#define GL_ATI_draw_buffers 1
#define EXTENSION_GL_ATI_draw_buffers(NAME, FUNC, CONST, END) \
	NAME(GL_ATI_draw_buffers) \
	CONST(int, GL_MAX_DRAW_BUFFERS_ATI, 0x8824) \
	CONST(int, GL_DRAW_BUFFER0_ATI, 0x8825) \
	CONST(int, GL_DRAW_BUFFER1_ATI, 0x8826) \
	CONST(int, GL_DRAW_BUFFER2_ATI, 0x8827) \
	CONST(int, GL_DRAW_BUFFER3_ATI, 0x8828) \
	CONST(int, GL_DRAW_BUFFER4_ATI, 0x8829) \
	CONST(int, GL_DRAW_BUFFER5_ATI, 0x882A) \
	CONST(int, GL_DRAW_BUFFER6_ATI, 0x882B) \
	CONST(int, GL_DRAW_BUFFER7_ATI, 0x882C) \
	CONST(int, GL_DRAW_BUFFER8_ATI, 0x882D) \
	CONST(int, GL_DRAW_BUFFER9_ATI, 0x882E) \
	CONST(int, GL_DRAW_BUFFER10_ATI, 0x882F) \
	CONST(int, GL_DRAW_BUFFER11_ATI, 0x8830) \
	CONST(int, GL_DRAW_BUFFER12_ATI, 0x8831) \
	CONST(int, GL_DRAW_BUFFER13_ATI, 0x8832) \
	CONST(int, GL_DRAW_BUFFER14_ATI, 0x8833) \
	CONST(int, GL_DRAW_BUFFER15_ATI, 0x8834) \
	FUNC(void , glDrawBuffersATI, GLDRAWBUFFERSATI, (GLsizei n , const GLenum * bufs ), (n, bufs)) \
	END()
#else
#define EXTENSION_GL_ATI_draw_buffers(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ATI_element_array
#define GL_ATI_element_array 1
#define EXTENSION_GL_ATI_element_array(NAME, FUNC, CONST, END) \
	NAME(GL_ATI_element_array) \
	CONST(int, GL_ELEMENT_ARRAY_ATI, 0x8768) \
	CONST(int, GL_ELEMENT_ARRAY_TYPE_ATI, 0x8769) \
	CONST(int, GL_ELEMENT_ARRAY_POINTER_ATI, 0x876A) \
	FUNC(void , glElementPointerATI, GLELEMENTPOINTERATI, (GLenum type , const GLvoid * pointer ), (type, pointer)) \
	FUNC(void , glDrawElementArrayATI, GLDRAWELEMENTARRAYATI, (GLenum mode , GLsizei count ), (mode, count)) \
	FUNC(void , glDrawRangeElementArrayATI, GLDRAWRANGEELEMENTARRAYATI, (GLenum mode , GLuint start , GLuint end , GLsizei count ), (mode, start, end, count)) \
	END()
#else
#define EXTENSION_GL_ATI_element_array(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ATI_envmap_bumpmap
#define GL_ATI_envmap_bumpmap 1
#define EXTENSION_GL_ATI_envmap_bumpmap(NAME, FUNC, CONST, END) \
	NAME(GL_ATI_envmap_bumpmap) \
	CONST(int, GL_BUMP_ROT_MATRIX_ATI, 0x8775) \
	CONST(int, GL_BUMP_ROT_MATRIX_SIZE_ATI, 0x8776) \
	CONST(int, GL_BUMP_NUM_TEX_UNITS_ATI, 0x8777) \
	CONST(int, GL_BUMP_TEX_UNITS_ATI, 0x8778) \
	CONST(int, GL_DUDV_ATI, 0x8779) \
	CONST(int, GL_DU8DV8_ATI, 0x877A) \
	CONST(int, GL_BUMP_ENVMAP_ATI, 0x877B) \
	CONST(int, GL_BUMP_TARGET_ATI, 0x877C) \
	FUNC(void , glTexBumpParameterivATI, GLTEXBUMPPARAMETERIVATI, (GLenum pname , const GLint * param ), (pname, param)) \
	FUNC(void , glTexBumpParameterfvATI, GLTEXBUMPPARAMETERFVATI, (GLenum pname , const GLfloat * param ), (pname, param)) \
	FUNC(void , glGetTexBumpParameterivATI, GLGETTEXBUMPPARAMETERIVATI, (GLenum pname , GLint * param ), (pname, param)) \
	FUNC(void , glGetTexBumpParameterfvATI, GLGETTEXBUMPPARAMETERFVATI, (GLenum pname , GLfloat * param ), (pname, param)) \
	END()
#else
#define EXTENSION_GL_ATI_envmap_bumpmap(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ATI_fragment_shader
#define GL_ATI_fragment_shader 1
#define EXTENSION_GL_ATI_fragment_shader(NAME, FUNC, CONST, END) \
	NAME(GL_ATI_fragment_shader) \
	CONST(int, GL_FRAGMENT_SHADER_ATI, 0x8920) \
	CONST(int, GL_REG_0_ATI, 0x8921) \
	CONST(int, GL_REG_1_ATI, 0x8922) \
	CONST(int, GL_REG_2_ATI, 0x8923) \
	CONST(int, GL_REG_3_ATI, 0x8924) \
	CONST(int, GL_REG_4_ATI, 0x8925) \
	CONST(int, GL_REG_5_ATI, 0x8926) \
	CONST(int, GL_REG_6_ATI, 0x8927) \
	CONST(int, GL_REG_7_ATI, 0x8928) \
	CONST(int, GL_REG_8_ATI, 0x8929) \
	CONST(int, GL_REG_9_ATI, 0x892A) \
	CONST(int, GL_REG_10_ATI, 0x892B) \
	CONST(int, GL_REG_11_ATI, 0x892C) \
	CONST(int, GL_REG_12_ATI, 0x892D) \
	CONST(int, GL_REG_13_ATI, 0x892E) \
	CONST(int, GL_REG_14_ATI, 0x892F) \
	CONST(int, GL_REG_15_ATI, 0x8930) \
	CONST(int, GL_REG_16_ATI, 0x8931) \
	CONST(int, GL_REG_17_ATI, 0x8932) \
	CONST(int, GL_REG_18_ATI, 0x8933) \
	CONST(int, GL_REG_19_ATI, 0x8934) \
	CONST(int, GL_REG_20_ATI, 0x8935) \
	CONST(int, GL_REG_21_ATI, 0x8936) \
	CONST(int, GL_REG_22_ATI, 0x8937) \
	CONST(int, GL_REG_23_ATI, 0x8938) \
	CONST(int, GL_REG_24_ATI, 0x8939) \
	CONST(int, GL_REG_25_ATI, 0x893A) \
	CONST(int, GL_REG_26_ATI, 0x893B) \
	CONST(int, GL_REG_27_ATI, 0x893C) \
	CONST(int, GL_REG_28_ATI, 0x893D) \
	CONST(int, GL_REG_29_ATI, 0x893E) \
	CONST(int, GL_REG_30_ATI, 0x893F) \
	CONST(int, GL_REG_31_ATI, 0x8940) \
	CONST(int, GL_CON_0_ATI, 0x8941) \
	CONST(int, GL_CON_1_ATI, 0x8942) \
	CONST(int, GL_CON_2_ATI, 0x8943) \
	CONST(int, GL_CON_3_ATI, 0x8944) \
	CONST(int, GL_CON_4_ATI, 0x8945) \
	CONST(int, GL_CON_5_ATI, 0x8946) \
	CONST(int, GL_CON_6_ATI, 0x8947) \
	CONST(int, GL_CON_7_ATI, 0x8948) \
	CONST(int, GL_CON_8_ATI, 0x8949) \
	CONST(int, GL_CON_9_ATI, 0x894A) \
	CONST(int, GL_CON_10_ATI, 0x894B) \
	CONST(int, GL_CON_11_ATI, 0x894C) \
	CONST(int, GL_CON_12_ATI, 0x894D) \
	CONST(int, GL_CON_13_ATI, 0x894E) \
	CONST(int, GL_CON_14_ATI, 0x894F) \
	CONST(int, GL_CON_15_ATI, 0x8950) \
	CONST(int, GL_CON_16_ATI, 0x8951) \
	CONST(int, GL_CON_17_ATI, 0x8952) \
	CONST(int, GL_CON_18_ATI, 0x8953) \
	CONST(int, GL_CON_19_ATI, 0x8954) \
	CONST(int, GL_CON_20_ATI, 0x8955) \
	CONST(int, GL_CON_21_ATI, 0x8956) \
	CONST(int, GL_CON_22_ATI, 0x8957) \
	CONST(int, GL_CON_23_ATI, 0x8958) \
	CONST(int, GL_CON_24_ATI, 0x8959) \
	CONST(int, GL_CON_25_ATI, 0x895A) \
	CONST(int, GL_CON_26_ATI, 0x895B) \
	CONST(int, GL_CON_27_ATI, 0x895C) \
	CONST(int, GL_CON_28_ATI, 0x895D) \
	CONST(int, GL_CON_29_ATI, 0x895E) \
	CONST(int, GL_CON_30_ATI, 0x895F) \
	CONST(int, GL_CON_31_ATI, 0x8960) \
	CONST(int, GL_MOV_ATI, 0x8961) \
	CONST(int, GL_ADD_ATI, 0x8963) \
	CONST(int, GL_MUL_ATI, 0x8964) \
	CONST(int, GL_SUB_ATI, 0x8965) \
	CONST(int, GL_DOT3_ATI, 0x8966) \
	CONST(int, GL_DOT4_ATI, 0x8967) \
	CONST(int, GL_MAD_ATI, 0x8968) \
	CONST(int, GL_LERP_ATI, 0x8969) \
	CONST(int, GL_CND_ATI, 0x896A) \
	CONST(int, GL_CND0_ATI, 0x896B) \
	CONST(int, GL_DOT2_ADD_ATI, 0x896C) \
	CONST(int, GL_SECONDARY_INTERPOLATOR_ATI, 0x896D) \
	CONST(int, GL_NUM_FRAGMENT_REGISTERS_ATI, 0x896E) \
	CONST(int, GL_NUM_FRAGMENT_CONSTANTS_ATI, 0x896F) \
	CONST(int, GL_NUM_PASSES_ATI, 0x8970) \
	CONST(int, GL_NUM_INSTRUCTIONS_PER_PASS_ATI, 0x8971) \
	CONST(int, GL_NUM_INSTRUCTIONS_TOTAL_ATI, 0x8972) \
	CONST(int, GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI, 0x8973) \
	CONST(int, GL_NUM_LOOPBACK_COMPONENTS_ATI, 0x8974) \
	CONST(int, GL_COLOR_ALPHA_PAIRING_ATI, 0x8975) \
	CONST(int, GL_SWIZZLE_STR_ATI, 0x8976) \
	CONST(int, GL_SWIZZLE_STQ_ATI, 0x8977) \
	CONST(int, GL_SWIZZLE_STR_DR_ATI, 0x8978) \
	CONST(int, GL_SWIZZLE_STQ_DQ_ATI, 0x8979) \
	CONST(int, GL_SWIZZLE_STRQ_ATI, 0x897A) \
	CONST(int, GL_SWIZZLE_STRQ_DQ_ATI, 0x897B) \
	CONST(int, GL_RED_BIT_ATI, 0x00000001) \
	CONST(int, GL_GREEN_BIT_ATI, 0x00000002) \
	CONST(int, GL_BLUE_BIT_ATI, 0x00000004) \
	CONST(int, GL_2X_BIT_ATI, 0x00000001) \
	CONST(int, GL_4X_BIT_ATI, 0x00000002) \
	CONST(int, GL_8X_BIT_ATI, 0x00000004) \
	CONST(int, GL_HALF_BIT_ATI, 0x00000008) \
	CONST(int, GL_QUARTER_BIT_ATI, 0x00000010) \
	CONST(int, GL_EIGHTH_BIT_ATI, 0x00000020) \
	CONST(int, GL_SATURATE_BIT_ATI, 0x00000040) \
	CONST(int, GL_COMP_BIT_ATI, 0x00000002) \
	CONST(int, GL_NEGATE_BIT_ATI, 0x00000004) \
	CONST(int, GL_BIAS_BIT_ATI, 0x00000008) \
	FUNC(GLuint , glGenFragmentShadersATI, GLGENFRAGMENTSHADERSATI, (GLuint range ), (range)) \
	FUNC(void , glBindFragmentShaderATI, GLBINDFRAGMENTSHADERATI, (GLuint id ), (id)) \
	FUNC(void , glDeleteFragmentShaderATI, GLDELETEFRAGMENTSHADERATI, (GLuint id ), (id)) \
	FUNC(void , glBeginFragmentShaderATI, GLBEGINFRAGMENTSHADERATI, (void ), ()) \
	FUNC(void , glEndFragmentShaderATI, GLENDFRAGMENTSHADERATI, (void ), ()) \
	FUNC(void , glPassTexCoordATI, GLPASSTEXCOORDATI, (GLuint dst , GLuint coord , GLenum swizzle ), (dst, coord, swizzle)) \
	FUNC(void , glSampleMapATI, GLSAMPLEMAPATI, (GLuint dst , GLuint interp , GLenum swizzle ), (dst, interp, swizzle)) \
	FUNC(void , glColorFragmentOp1ATI, GLCOLORFRAGMENTOP1ATI, (GLenum op , GLuint dst , GLuint dstMask , GLuint dstMod , GLuint arg1 , GLuint arg1Rep , GLuint arg1Mod ), (op, dst, dstMask, dstMod, arg1, arg1Rep, arg1Mod)) \
	FUNC(void , glColorFragmentOp2ATI, GLCOLORFRAGMENTOP2ATI, (GLenum op , GLuint dst , GLuint dstMask , GLuint dstMod , GLuint arg1 , GLuint arg1Rep , GLuint arg1Mod , GLuint arg2 , GLuint arg2Rep , GLuint arg2Mod ), (op, dst, dstMask, dstMod, arg1, arg1Rep, arg1Mod, arg2, arg2Rep, arg2Mod)) \
	FUNC(void , glColorFragmentOp3ATI, GLCOLORFRAGMENTOP3ATI, (GLenum op , GLuint dst , GLuint dstMask , GLuint dstMod , GLuint arg1 , GLuint arg1Rep , GLuint arg1Mod , GLuint arg2 , GLuint arg2Rep , GLuint arg2Mod , GLuint arg3 , GLuint arg3Rep , GLuint arg3Mod ), (op, dst, dstMask, dstMod, arg1, arg1Rep, arg1Mod, arg2, arg2Rep, arg2Mod, arg3, arg3Rep, arg3Mod)) \
	FUNC(void , glAlphaFragmentOp1ATI, GLALPHAFRAGMENTOP1ATI, (GLenum op , GLuint dst , GLuint dstMod , GLuint arg1 , GLuint arg1Rep , GLuint arg1Mod ), (op, dst, dstMod, arg1, arg1Rep, arg1Mod)) \
	FUNC(void , glAlphaFragmentOp2ATI, GLALPHAFRAGMENTOP2ATI, (GLenum op , GLuint dst , GLuint dstMod , GLuint arg1 , GLuint arg1Rep , GLuint arg1Mod , GLuint arg2 , GLuint arg2Rep , GLuint arg2Mod ), (op, dst, dstMod, arg1, arg1Rep, arg1Mod, arg2, arg2Rep, arg2Mod)) \
	FUNC(void , glAlphaFragmentOp3ATI, GLALPHAFRAGMENTOP3ATI, (GLenum op , GLuint dst , GLuint dstMod , GLuint arg1 , GLuint arg1Rep , GLuint arg1Mod , GLuint arg2 , GLuint arg2Rep , GLuint arg2Mod , GLuint arg3 , GLuint arg3Rep , GLuint arg3Mod ), (op, dst, dstMod, arg1, arg1Rep, arg1Mod, arg2, arg2Rep, arg2Mod, arg3, arg3Rep, arg3Mod)) \
	FUNC(void , glSetFragmentShaderConstantATI, GLSETFRAGMENTSHADERCONSTANTATI, (GLuint dst , const GLfloat * value ), (dst, value)) \
	END()
#else
#define EXTENSION_GL_ATI_fragment_shader(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ATI_map_object_buffer
#define GL_ATI_map_object_buffer 1
#define EXTENSION_GL_ATI_map_object_buffer(NAME, FUNC, CONST, END) \
	NAME(GL_ATI_map_object_buffer) \
	FUNC(GLvoid * , glMapObjectBufferATI, GLMAPOBJECTBUFFERATI, (GLuint buffer ), (buffer)) \
	FUNC(void , glUnmapObjectBufferATI, GLUNMAPOBJECTBUFFERATI, (GLuint buffer ), (buffer)) \
	END()
#else
#define EXTENSION_GL_ATI_map_object_buffer(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ATI_meminfo
#define GL_ATI_meminfo 1
#define EXTENSION_GL_ATI_meminfo(NAME, FUNC, CONST, END) \
	NAME(GL_ATI_meminfo) \
	CONST(int, GL_VBO_FREE_MEMORY_ATI, 0x87FB) \
	CONST(int, GL_TEXTURE_FREE_MEMORY_ATI, 0x87FC) \
	CONST(int, GL_RENDERBUFFER_FREE_MEMORY_ATI, 0x87FD) \
	END()
#else
#define EXTENSION_GL_ATI_meminfo(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ATI_pixel_format_float
#define GL_ATI_pixel_format_float 1
#define EXTENSION_GL_ATI_pixel_format_float(NAME, FUNC, CONST, END) \
	NAME(GL_ATI_pixel_format_float) \
	CONST(int, GL_TYPE_RGBA_FLOAT_ATI, 0x8820) \
	CONST(int, GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI, 0x8835) \
	END()
#else
#define EXTENSION_GL_ATI_pixel_format_float(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ATI_pn_triangles
#define GL_ATI_pn_triangles 1
#define EXTENSION_GL_ATI_pn_triangles(NAME, FUNC, CONST, END) \
	NAME(GL_ATI_pn_triangles) \
	CONST(int, GL_PN_TRIANGLES_ATI, 0x87F0) \
	CONST(int, GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI, 0x87F1) \
	CONST(int, GL_PN_TRIANGLES_POINT_MODE_ATI, 0x87F2) \
	CONST(int, GL_PN_TRIANGLES_NORMAL_MODE_ATI, 0x87F3) \
	CONST(int, GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI, 0x87F4) \
	CONST(int, GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI, 0x87F5) \
	CONST(int, GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI, 0x87F6) \
	CONST(int, GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI, 0x87F7) \
	CONST(int, GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI, 0x87F8) \
	FUNC(void , glPNTrianglesiATI, GLPNTRIANGLESIATI, (GLenum pname , GLint param ), (pname, param)) \
	FUNC(void , glPNTrianglesfATI, GLPNTRIANGLESFATI, (GLenum pname , GLfloat param ), (pname, param)) \
	END()
#else
#define EXTENSION_GL_ATI_pn_triangles(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ATI_separate_stencil
#define GL_ATI_separate_stencil 1
#define EXTENSION_GL_ATI_separate_stencil(NAME, FUNC, CONST, END) \
	NAME(GL_ATI_separate_stencil) \
	CONST(int, GL_STENCIL_BACK_FUNC_ATI, 0x8800) \
	CONST(int, GL_STENCIL_BACK_FAIL_ATI, 0x8801) \
	CONST(int, GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI, 0x8802) \
	CONST(int, GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI, 0x8803) \
	FUNC(void , glStencilOpSeparateATI, GLSTENCILOPSEPARATEATI, (GLenum face , GLenum sfail , GLenum dpfail , GLenum dppass ), (face, sfail, dpfail, dppass)) \
	FUNC(void , glStencilFuncSeparateATI, GLSTENCILFUNCSEPARATEATI, (GLenum frontfunc , GLenum backfunc , GLint ref , GLuint mask ), (frontfunc, backfunc, ref, mask)) \
	END()
#else
#define EXTENSION_GL_ATI_separate_stencil(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ATI_text_fragment_shader
#define GL_ATI_text_fragment_shader 1
#define EXTENSION_GL_ATI_text_fragment_shader(NAME, FUNC, CONST, END) \
	NAME(GL_ATI_text_fragment_shader) \
	CONST(int, GL_TEXT_FRAGMENT_SHADER_ATI, 0x8200) \
	END()
#else
#define EXTENSION_GL_ATI_text_fragment_shader(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ATI_texture_env_combine3
#define GL_ATI_texture_env_combine3 1
#define EXTENSION_GL_ATI_texture_env_combine3(NAME, FUNC, CONST, END) \
	NAME(GL_ATI_texture_env_combine3) \
	CONST(int, GL_MODULATE_ADD_ATI, 0x8744) \
	CONST(int, GL_MODULATE_SIGNED_ADD_ATI, 0x8745) \
	CONST(int, GL_MODULATE_SUBTRACT_ATI, 0x8746) \
	END()
#else
#define EXTENSION_GL_ATI_texture_env_combine3(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ATI_texture_float
#define GL_ATI_texture_float 1
#define EXTENSION_GL_ATI_texture_float(NAME, FUNC, CONST, END) \
	NAME(GL_ATI_texture_float) \
	CONST(int, GL_RGBA_FLOAT32_ATI, 0x8814) \
	CONST(int, GL_RGB_FLOAT32_ATI, 0x8815) \
	CONST(int, GL_ALPHA_FLOAT32_ATI, 0x8816) \
	CONST(int, GL_INTENSITY_FLOAT32_ATI, 0x8817) \
	CONST(int, GL_LUMINANCE_FLOAT32_ATI, 0x8818) \
	CONST(int, GL_LUMINANCE_ALPHA_FLOAT32_ATI, 0x8819) \
	CONST(int, GL_RGBA_FLOAT16_ATI, 0x881A) \
	CONST(int, GL_RGB_FLOAT16_ATI, 0x881B) \
	CONST(int, GL_ALPHA_FLOAT16_ATI, 0x881C) \
	CONST(int, GL_INTENSITY_FLOAT16_ATI, 0x881D) \
	CONST(int, GL_LUMINANCE_FLOAT16_ATI, 0x881E) \
	CONST(int, GL_LUMINANCE_ALPHA_FLOAT16_ATI, 0x881F) \
	END()
#else
#define EXTENSION_GL_ATI_texture_float(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ATI_texture_mirror_once
#define GL_ATI_texture_mirror_once 1
#define EXTENSION_GL_ATI_texture_mirror_once(NAME, FUNC, CONST, END) \
	NAME(GL_ATI_texture_mirror_once) \
	CONST(int, GL_MIRROR_CLAMP_ATI, 0x8742) \
	CONST(int, GL_MIRROR_CLAMP_TO_EDGE_ATI, 0x8743) \
	END()
#else
#define EXTENSION_GL_ATI_texture_mirror_once(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ATI_vertex_array_object
#define GL_ATI_vertex_array_object 1
#define EXTENSION_GL_ATI_vertex_array_object(NAME, FUNC, CONST, END) \
	NAME(GL_ATI_vertex_array_object) \
	CONST(int, GL_STATIC_ATI, 0x8760) \
	CONST(int, GL_DYNAMIC_ATI, 0x8761) \
	CONST(int, GL_PRESERVE_ATI, 0x8762) \
	CONST(int, GL_DISCARD_ATI, 0x8763) \
	CONST(int, GL_OBJECT_BUFFER_SIZE_ATI, 0x8764) \
	CONST(int, GL_OBJECT_BUFFER_USAGE_ATI, 0x8765) \
	CONST(int, GL_ARRAY_OBJECT_BUFFER_ATI, 0x8766) \
	CONST(int, GL_ARRAY_OBJECT_OFFSET_ATI, 0x8767) \
	FUNC(GLuint , glNewObjectBufferATI, GLNEWOBJECTBUFFERATI, (GLsizei size , const GLvoid * pointer , GLenum usage ), (size, pointer, usage)) \
	FUNC(GLboolean , glIsObjectBufferATI, GLISOBJECTBUFFERATI, (GLuint buffer ), (buffer)) \
	FUNC(void , glUpdateObjectBufferATI, GLUPDATEOBJECTBUFFERATI, (GLuint buffer , GLuint offset , GLsizei size , const GLvoid * pointer , GLenum preserve ), (buffer, offset, size, pointer, preserve)) \
	FUNC(void , glGetObjectBufferfvATI, GLGETOBJECTBUFFERFVATI, (GLuint buffer , GLenum pname , GLfloat * params ), (buffer, pname, params)) \
	FUNC(void , glGetObjectBufferivATI, GLGETOBJECTBUFFERIVATI, (GLuint buffer , GLenum pname , GLint * params ), (buffer, pname, params)) \
	FUNC(void , glFreeObjectBufferATI, GLFREEOBJECTBUFFERATI, (GLuint buffer ), (buffer)) \
	FUNC(void , glArrayObjectATI, GLARRAYOBJECTATI, (GLenum array , GLint size , GLenum type , GLsizei stride , GLuint buffer , GLuint offset ), (array, size, type, stride, buffer, offset)) \
	FUNC(void , glGetArrayObjectfvATI, GLGETARRAYOBJECTFVATI, (GLenum array , GLenum pname , GLfloat * params ), (array, pname, params)) \
	FUNC(void , glGetArrayObjectivATI, GLGETARRAYOBJECTIVATI, (GLenum array , GLenum pname , GLint * params ), (array, pname, params)) \
	FUNC(void , glVariantArrayObjectATI, GLVARIANTARRAYOBJECTATI, (GLuint id , GLenum type , GLsizei stride , GLuint buffer , GLuint offset ), (id, type, stride, buffer, offset)) \
	FUNC(void , glGetVariantArrayObjectfvATI, GLGETVARIANTARRAYOBJECTFVATI, (GLuint id , GLenum pname , GLfloat * params ), (id, pname, params)) \
	FUNC(void , glGetVariantArrayObjectivATI, GLGETVARIANTARRAYOBJECTIVATI, (GLuint id , GLenum pname , GLint * params ), (id, pname, params)) \
	END()
#else
#define EXTENSION_GL_ATI_vertex_array_object(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ATI_vertex_attrib_array_object
#define GL_ATI_vertex_attrib_array_object 1
#define EXTENSION_GL_ATI_vertex_attrib_array_object(NAME, FUNC, CONST, END) \
	NAME(GL_ATI_vertex_attrib_array_object) \
	FUNC(void , glVertexAttribArrayObjectATI, GLVERTEXATTRIBARRAYOBJECTATI, (GLuint index , GLint size , GLenum type , GLboolean normalized , GLsizei stride , GLuint buffer , GLuint offset ), (index, size, type, normalized, stride, buffer, offset)) \
	FUNC(void , glGetVertexAttribArrayObjectfvATI, GLGETVERTEXATTRIBARRAYOBJECTFVATI, (GLuint index , GLenum pname , GLfloat * params ), (index, pname, params)) \
	FUNC(void , glGetVertexAttribArrayObjectivATI, GLGETVERTEXATTRIBARRAYOBJECTIVATI, (GLuint index , GLenum pname , GLint * params ), (index, pname, params)) \
	END()
#else
#define EXTENSION_GL_ATI_vertex_attrib_array_object(NAME, FUNC, CONST, END)
#endif

#ifndef GL_ATI_vertex_streams
#define GL_ATI_vertex_streams 1
#define EXTENSION_GL_ATI_vertex_streams(NAME, FUNC, CONST, END) \
	NAME(GL_ATI_vertex_streams) \
	CONST(int, GL_MAX_VERTEX_STREAMS_ATI, 0x876B) \
	CONST(int, GL_VERTEX_STREAM0_ATI, 0x876C) \
	CONST(int, GL_VERTEX_STREAM1_ATI, 0x876D) \
	CONST(int, GL_VERTEX_STREAM2_ATI, 0x876E) \
	CONST(int, GL_VERTEX_STREAM3_ATI, 0x876F) \
	CONST(int, GL_VERTEX_STREAM4_ATI, 0x8770) \
	CONST(int, GL_VERTEX_STREAM5_ATI, 0x8771) \
	CONST(int, GL_VERTEX_STREAM6_ATI, 0x8772) \
	CONST(int, GL_VERTEX_STREAM7_ATI, 0x8773) \
	CONST(int, GL_VERTEX_SOURCE_ATI, 0x8774) \
	FUNC(void , glVertexStream1sATI, GLVERTEXSTREAM1SATI, (GLenum stream , GLshort x ), (stream, x)) \
	FUNC(void , glVertexStream1svATI, GLVERTEXSTREAM1SVATI, (GLenum stream , const GLshort * coords ), (stream, coords)) \
	FUNC(void , glVertexStream1iATI, GLVERTEXSTREAM1IATI, (GLenum stream , GLint x ), (stream, x)) \
	FUNC(void , glVertexStream1ivATI, GLVERTEXSTREAM1IVATI, (GLenum stream , const GLint * coords ), (stream, coords)) \
	FUNC(void , glVertexStream1fATI, GLVERTEXSTREAM1FATI, (GLenum stream , GLfloat x ), (stream, x)) \
	FUNC(void , glVertexStream1fvATI, GLVERTEXSTREAM1FVATI, (GLenum stream , const GLfloat * coords ), (stream, coords)) \
	FUNC(void , glVertexStream1dATI, GLVERTEXSTREAM1DATI, (GLenum stream , GLdouble x ), (stream, x)) \
	FUNC(void , glVertexStream1dvATI, GLVERTEXSTREAM1DVATI, (GLenum stream , const GLdouble * coords ), (stream, coords)) \
	FUNC(void , glVertexStream2sATI, GLVERTEXSTREAM2SATI, (GLenum stream , GLshort x , GLshort y ), (stream, x, y)) \
	FUNC(void , glVertexStream2svATI, GLVERTEXSTREAM2SVATI, (GLenum stream , const GLshort * coords ), (stream, coords)) \
	FUNC(void , glVertexStream2iATI, GLVERTEXSTREAM2IATI, (GLenum stream , GLint x , GLint y ), (stream, x, y)) \
	FUNC(void , glVertexStream2ivATI, GLVERTEXSTREAM2IVATI, (GLenum stream , const GLint * coords ), (stream, coords)) \
	FUNC(void , glVertexStream2fATI, GLVERTEXSTREAM2FATI, (GLenum stream , GLfloat x , GLfloat y ), (stream, x, y)) \
	FUNC(void , glVertexStream2fvATI, GLVERTEXSTREAM2FVATI, (GLenum stream , const GLfloat * coords ), (stream, coords)) \
	FUNC(void , glVertexStream2dATI, GLVERTEXSTREAM2DATI, (GLenum stream , GLdouble x , GLdouble y ), (stream, x, y)) \
	FUNC(void , glVertexStream2dvATI, GLVERTEXSTREAM2DVATI, (GLenum stream , const GLdouble * coords ), (stream, coords)) \
	FUNC(void , glVertexStream3sATI, GLVERTEXSTREAM3SATI, (GLenum stream , GLshort x , GLshort y , GLshort z ), (stream, x, y, z)) \
	FUNC(void , glVertexStream3svATI, GLVERTEXSTREAM3SVATI, (GLenum stream , const GLshort * coords ), (stream, coords)) \
	FUNC(void , glVertexStream3iATI, GLVERTEXSTREAM3IATI, (GLenum stream , GLint x , GLint y , GLint z ), (stream, x, y, z)) \
	FUNC(void , glVertexStream3ivATI, GLVERTEXSTREAM3IVATI, (GLenum stream , const GLint * coords ), (stream, coords)) \
	FUNC(void , glVertexStream3fATI, GLVERTEXSTREAM3FATI, (GLenum stream , GLfloat x , GLfloat y , GLfloat z ), (stream, x, y, z)) \
	FUNC(void , glVertexStream3fvATI, GLVERTEXSTREAM3FVATI, (GLenum stream , const GLfloat * coords ), (stream, coords)) \
	FUNC(void , glVertexStream3dATI, GLVERTEXSTREAM3DATI, (GLenum stream , GLdouble x , GLdouble y , GLdouble z ), (stream, x, y, z)) \
	FUNC(void , glVertexStream3dvATI, GLVERTEXSTREAM3DVATI, (GLenum stream , const GLdouble * coords ), (stream, coords)) \
	FUNC(void , glVertexStream4sATI, GLVERTEXSTREAM4SATI, (GLenum stream , GLshort x , GLshort y , GLshort z , GLshort w ), (stream, x, y, z, w)) \
	FUNC(void , glVertexStream4svATI, GLVERTEXSTREAM4SVATI, (GLenum stream , const GLshort * coords ), (stream, coords)) \
	FUNC(void , glVertexStream4iATI, GLVERTEXSTREAM4IATI, (GLenum stream , GLint x , GLint y , GLint z , GLint w ), (stream, x, y, z, w)) \
	FUNC(void , glVertexStream4ivATI, GLVERTEXSTREAM4IVATI, (GLenum stream , const GLint * coords ), (stream, coords)) \
	FUNC(void , glVertexStream4fATI, GLVERTEXSTREAM4FATI, (GLenum stream , GLfloat x , GLfloat y , GLfloat z , GLfloat w ), (stream, x, y, z, w)) \
	FUNC(void , glVertexStream4fvATI, GLVERTEXSTREAM4FVATI, (GLenum stream , const GLfloat * coords ), (stream, coords)) \
	FUNC(void , glVertexStream4dATI, GLVERTEXSTREAM4DATI, (GLenum stream , GLdouble x , GLdouble y , GLdouble z , GLdouble w ), (stream, x, y, z, w)) \
	FUNC(void , glVertexStream4dvATI, GLVERTEXSTREAM4DVATI, (GLenum stream , const GLdouble * coords ), (stream, coords)) \
	FUNC(void , glNormalStream3bATI, GLNORMALSTREAM3BATI, (GLenum stream , GLbyte nx , GLbyte ny , GLbyte nz ), (stream, nx, ny, nz)) \
	FUNC(void , glNormalStream3bvATI, GLNORMALSTREAM3BVATI, (GLenum stream , const GLbyte * coords ), (stream, coords)) \
	FUNC(void , glNormalStream3sATI, GLNORMALSTREAM3SATI, (GLenum stream , GLshort nx , GLshort ny , GLshort nz ), (stream, nx, ny, nz)) \
	FUNC(void , glNormalStream3svATI, GLNORMALSTREAM3SVATI, (GLenum stream , const GLshort * coords ), (stream, coords)) \
	FUNC(void , glNormalStream3iATI, GLNORMALSTREAM3IATI, (GLenum stream , GLint nx , GLint ny , GLint nz ), (stream, nx, ny, nz)) \
	FUNC(void , glNormalStream3ivATI, GLNORMALSTREAM3IVATI, (GLenum stream , const GLint * coords ), (stream, coords)) \
	FUNC(void , glNormalStream3fATI, GLNORMALSTREAM3FATI, (GLenum stream , GLfloat nx , GLfloat ny , GLfloat nz ), (stream, nx, ny, nz)) \
	FUNC(void , glNormalStream3fvATI, GLNORMALSTREAM3FVATI, (GLenum stream , const GLfloat * coords ), (stream, coords)) \
	FUNC(void , glNormalStream3dATI, GLNORMALSTREAM3DATI, (GLenum stream , GLdouble nx , GLdouble ny , GLdouble nz ), (stream, nx, ny, nz)) \
	FUNC(void , glNormalStream3dvATI, GLNORMALSTREAM3DVATI, (GLenum stream , const GLdouble * coords ), (stream, coords)) \
	FUNC(void , glClientActiveVertexStreamATI, GLCLIENTACTIVEVERTEXSTREAMATI, (GLenum stream ), (stream)) \
	FUNC(void , glVertexBlendEnviATI, GLVERTEXBLENDENVIATI, (GLenum pname , GLint param ), (pname, param)) \
	FUNC(void , glVertexBlendEnvfATI, GLVERTEXBLENDENVFATI, (GLenum pname , GLfloat param ), (pname, param)) \
	END()
#else
#define EXTENSION_GL_ATI_vertex_streams(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_422_pixels
#define GL_EXT_422_pixels 1
#define EXTENSION_GL_EXT_422_pixels(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_422_pixels) \
	CONST(int, GL_422_EXT, 0x80CC) \
	CONST(int, GL_422_REV_EXT, 0x80CD) \
	CONST(int, GL_422_AVERAGE_EXT, 0x80CE) \
	CONST(int, GL_422_REV_AVERAGE_EXT, 0x80CF) \
	END()
#else
#define EXTENSION_GL_EXT_422_pixels(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_abgr
#define GL_EXT_abgr 1
#define EXTENSION_GL_EXT_abgr(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_abgr) \
	CONST(int, GL_ABGR_EXT, 0x8000) \
	END()
#else
#define EXTENSION_GL_EXT_abgr(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_bgra
#define GL_EXT_bgra 1
#define EXTENSION_GL_EXT_bgra(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_bgra) \
	CONST(int, GL_BGR_EXT, 0x80E0) \
	CONST(int, GL_BGRA_EXT, 0x80E1) \
	END()
#else
#define EXTENSION_GL_EXT_bgra(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_bindable_uniform
#define GL_EXT_bindable_uniform 1
#define EXTENSION_GL_EXT_bindable_uniform(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_bindable_uniform) \
	CONST(int, GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT, 0x8DE2) \
	CONST(int, GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT, 0x8DE3) \
	CONST(int, GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT, 0x8DE4) \
	CONST(int, GL_MAX_BINDABLE_UNIFORM_SIZE_EXT, 0x8DED) \
	CONST(int, GL_UNIFORM_BUFFER_EXT, 0x8DEE) \
	CONST(int, GL_UNIFORM_BUFFER_BINDING_EXT, 0x8DEF) \
	FUNC(void , glUniformBufferEXT, GLUNIFORMBUFFEREXT, (GLuint program , GLint location , GLuint buffer ), (program, location, buffer)) \
	FUNC(GLint , glGetUniformBufferSizeEXT, GLGETUNIFORMBUFFERSIZEEXT, (GLuint program , GLint location ), (program, location)) \
	FUNC(GLintptr , glGetUniformOffsetEXT, GLGETUNIFORMOFFSETEXT, (GLuint program , GLint location ), (program, location)) \
	END()
#else
#define EXTENSION_GL_EXT_bindable_uniform(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_blend_color
#define GL_EXT_blend_color 1
#define EXTENSION_GL_EXT_blend_color(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_blend_color) \
	CONST(int, GL_CONSTANT_COLOR_EXT, 0x8001) \
	CONST(int, GL_ONE_MINUS_CONSTANT_COLOR_EXT, 0x8002) \
	CONST(int, GL_CONSTANT_ALPHA_EXT, 0x8003) \
	CONST(int, GL_ONE_MINUS_CONSTANT_ALPHA_EXT, 0x8004) \
	CONST(int, GL_BLEND_COLOR_EXT, 0x8005) \
	FUNC(void , glBlendColorEXT, GLBLENDCOLOREXT, (GLclampf red , GLclampf green , GLclampf blue , GLclampf alpha ), (red, green, blue, alpha)) \
	END()
#else
#define EXTENSION_GL_EXT_blend_color(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_blend_equation_separate
#define GL_EXT_blend_equation_separate 1
#define EXTENSION_GL_EXT_blend_equation_separate(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_blend_equation_separate) \
	CONST(int, GL_BLEND_EQUATION_RGB_EXT, 0x8009) \
	CONST(int, GL_BLEND_EQUATION_ALPHA_EXT, 0x883D) \
	FUNC(void , glBlendEquationSeparateEXT, GLBLENDEQUATIONSEPARATEEXT, (GLenum modeRGB , GLenum modeAlpha ), (modeRGB, modeAlpha)) \
	END()
#else
#define EXTENSION_GL_EXT_blend_equation_separate(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_blend_func_separate
#define GL_EXT_blend_func_separate 1
#define EXTENSION_GL_EXT_blend_func_separate(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_blend_func_separate) \
	CONST(int, GL_BLEND_DST_RGB_EXT, 0x80C8) \
	CONST(int, GL_BLEND_SRC_RGB_EXT, 0x80C9) \
	CONST(int, GL_BLEND_DST_ALPHA_EXT, 0x80CA) \
	CONST(int, GL_BLEND_SRC_ALPHA_EXT, 0x80CB) \
	FUNC(void , glBlendFuncSeparateEXT, GLBLENDFUNCSEPARATEEXT, (GLenum sfactorRGB , GLenum dfactorRGB , GLenum sfactorAlpha , GLenum dfactorAlpha ), (sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha)) \
	END()
#else
#define EXTENSION_GL_EXT_blend_func_separate(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_blend_logic_op
#define GL_EXT_blend_logic_op 1
#define EXTENSION_GL_EXT_blend_logic_op(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_blend_logic_op) \
	END()
#else
#define EXTENSION_GL_EXT_blend_logic_op(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_blend_minmax
#define GL_EXT_blend_minmax 1
#define EXTENSION_GL_EXT_blend_minmax(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_blend_minmax) \
	CONST(int, GL_FUNC_ADD_EXT, 0x8006) \
	CONST(int, GL_MIN_EXT, 0x8007) \
	CONST(int, GL_MAX_EXT, 0x8008) \
	CONST(int, GL_BLEND_EQUATION_EXT, 0x8009) \
	FUNC(void , glBlendEquationEXT, GLBLENDEQUATIONEXT, (GLenum mode ), (mode)) \
	END()
#else
#define EXTENSION_GL_EXT_blend_minmax(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_blend_subtract
#define GL_EXT_blend_subtract 1
#define EXTENSION_GL_EXT_blend_subtract(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_blend_subtract) \
	CONST(int, GL_FUNC_SUBTRACT_EXT, 0x800A) \
	CONST(int, GL_FUNC_REVERSE_SUBTRACT_EXT, 0x800B) \
	END()
#else
#define EXTENSION_GL_EXT_blend_subtract(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_clip_volume_hint
#define GL_EXT_clip_volume_hint 1
#define EXTENSION_GL_EXT_clip_volume_hint(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_clip_volume_hint) \
	CONST(int, GL_CLIP_VOLUME_CLIPPING_HINT_EXT, 0x80F0) \
	END()
#else
#define EXTENSION_GL_EXT_clip_volume_hint(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_cmyka
#define GL_EXT_cmyka 1
#define EXTENSION_GL_EXT_cmyka(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_cmyka) \
	CONST(int, GL_CMYK_EXT, 0x800C) \
	CONST(int, GL_CMYKA_EXT, 0x800D) \
	CONST(int, GL_PACK_CMYK_HINT_EXT, 0x800E) \
	CONST(int, GL_UNPACK_CMYK_HINT_EXT, 0x800F) \
	END()
#else
#define EXTENSION_GL_EXT_cmyka(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_color_subtable
#define GL_EXT_color_subtable 1
#define EXTENSION_GL_EXT_color_subtable(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_color_subtable) \
	FUNC(void , glColorSubTableEXT, GLCOLORSUBTABLEEXT, (GLenum target , GLsizei start , GLsizei count , GLenum format , GLenum type , const GLvoid * data ), (target, start, count, format, type, data)) \
	FUNC(void , glCopyColorSubTableEXT, GLCOPYCOLORSUBTABLEEXT, (GLenum target , GLsizei start , GLint x , GLint y , GLsizei width ), (target, start, x, y, width)) \
	END()
#else
#define EXTENSION_GL_EXT_color_subtable(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_compiled_vertex_array
#define GL_EXT_compiled_vertex_array 1
#define EXTENSION_GL_EXT_compiled_vertex_array(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_compiled_vertex_array) \
	CONST(int, GL_ARRAY_ELEMENT_LOCK_FIRST_EXT, 0x81A8) \
	CONST(int, GL_ARRAY_ELEMENT_LOCK_COUNT_EXT, 0x81A9) \
	FUNC(void , glLockArraysEXT, GLLOCKARRAYSEXT, (GLint first , GLsizei count ), (first, count)) \
	FUNC(void , glUnlockArraysEXT, GLUNLOCKARRAYSEXT, (void ), ()) \
	END()
#else
#define EXTENSION_GL_EXT_compiled_vertex_array(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_convolution
#define GL_EXT_convolution 1
#define EXTENSION_GL_EXT_convolution(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_convolution) \
	CONST(int, GL_CONVOLUTION_1D_EXT, 0x8010) \
	CONST(int, GL_CONVOLUTION_2D_EXT, 0x8011) \
	CONST(int, GL_SEPARABLE_2D_EXT, 0x8012) \
	CONST(int, GL_CONVOLUTION_BORDER_MODE_EXT, 0x8013) \
	CONST(int, GL_CONVOLUTION_FILTER_SCALE_EXT, 0x8014) \
	CONST(int, GL_CONVOLUTION_FILTER_BIAS_EXT, 0x8015) \
	CONST(int, GL_REDUCE_EXT, 0x8016) \
	CONST(int, GL_CONVOLUTION_FORMAT_EXT, 0x8017) \
	CONST(int, GL_CONVOLUTION_WIDTH_EXT, 0x8018) \
	CONST(int, GL_CONVOLUTION_HEIGHT_EXT, 0x8019) \
	CONST(int, GL_MAX_CONVOLUTION_WIDTH_EXT, 0x801A) \
	CONST(int, GL_MAX_CONVOLUTION_HEIGHT_EXT, 0x801B) \
	CONST(int, GL_POST_CONVOLUTION_RED_SCALE_EXT, 0x801C) \
	CONST(int, GL_POST_CONVOLUTION_GREEN_SCALE_EXT, 0x801D) \
	CONST(int, GL_POST_CONVOLUTION_BLUE_SCALE_EXT, 0x801E) \
	CONST(int, GL_POST_CONVOLUTION_ALPHA_SCALE_EXT, 0x801F) \
	CONST(int, GL_POST_CONVOLUTION_RED_BIAS_EXT, 0x8020) \
	CONST(int, GL_POST_CONVOLUTION_GREEN_BIAS_EXT, 0x8021) \
	CONST(int, GL_POST_CONVOLUTION_BLUE_BIAS_EXT, 0x8022) \
	CONST(int, GL_POST_CONVOLUTION_ALPHA_BIAS_EXT, 0x8023) \
	FUNC(void , glConvolutionFilter1DEXT, GLCONVOLUTIONFILTER1DEXT, (GLenum target , GLenum internalformat , GLsizei width , GLenum format , GLenum type , const GLvoid * image ), (target, internalformat, width, format, type, image)) \
	FUNC(void , glConvolutionFilter2DEXT, GLCONVOLUTIONFILTER2DEXT, (GLenum target , GLenum internalformat , GLsizei width , GLsizei height , GLenum format , GLenum type , const GLvoid * image ), (target, internalformat, width, height, format, type, image)) \
	FUNC(void , glConvolutionParameterfEXT, GLCONVOLUTIONPARAMETERFEXT, (GLenum target , GLenum pname , GLfloat params ), (target, pname, params)) \
	FUNC(void , glConvolutionParameterfvEXT, GLCONVOLUTIONPARAMETERFVEXT, (GLenum target , GLenum pname , const GLfloat * params ), (target, pname, params)) \
	FUNC(void , glConvolutionParameteriEXT, GLCONVOLUTIONPARAMETERIEXT, (GLenum target , GLenum pname , GLint params ), (target, pname, params)) \
	FUNC(void , glConvolutionParameterivEXT, GLCONVOLUTIONPARAMETERIVEXT, (GLenum target , GLenum pname , const GLint * params ), (target, pname, params)) \
	FUNC(void , glCopyConvolutionFilter1DEXT, GLCOPYCONVOLUTIONFILTER1DEXT, (GLenum target , GLenum internalformat , GLint x , GLint y , GLsizei width ), (target, internalformat, x, y, width)) \
	FUNC(void , glCopyConvolutionFilter2DEXT, GLCOPYCONVOLUTIONFILTER2DEXT, (GLenum target , GLenum internalformat , GLint x , GLint y , GLsizei width , GLsizei height ), (target, internalformat, x, y, width, height)) \
	FUNC(void , glGetConvolutionFilterEXT, GLGETCONVOLUTIONFILTEREXT, (GLenum target , GLenum format , GLenum type , GLvoid * image ), (target, format, type, image)) \
	FUNC(void , glGetConvolutionParameterfvEXT, GLGETCONVOLUTIONPARAMETERFVEXT, (GLenum target , GLenum pname , GLfloat * params ), (target, pname, params)) \
	FUNC(void , glGetConvolutionParameterivEXT, GLGETCONVOLUTIONPARAMETERIVEXT, (GLenum target , GLenum pname , GLint * params ), (target, pname, params)) \
	FUNC(void , glGetSeparableFilterEXT, GLGETSEPARABLEFILTEREXT, (GLenum target , GLenum format , GLenum type , GLvoid * row , GLvoid * column , GLvoid * span ), (target, format, type, row, column, span)) \
	FUNC(void , glSeparableFilter2DEXT, GLSEPARABLEFILTER2DEXT, (GLenum target , GLenum internalformat , GLsizei width , GLsizei height , GLenum format , GLenum type , const GLvoid * row , const GLvoid * column ), (target, internalformat, width, height, format, type, row, column)) \
	END()
#else
#define EXTENSION_GL_EXT_convolution(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_coordinate_frame
#define GL_EXT_coordinate_frame 1
#define EXTENSION_GL_EXT_coordinate_frame(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_coordinate_frame) \
	CONST(int, GL_TANGENT_ARRAY_EXT, 0x8439) \
	CONST(int, GL_BINORMAL_ARRAY_EXT, 0x843A) \
	CONST(int, GL_CURRENT_TANGENT_EXT, 0x843B) \
	CONST(int, GL_CURRENT_BINORMAL_EXT, 0x843C) \
	CONST(int, GL_TANGENT_ARRAY_TYPE_EXT, 0x843E) \
	CONST(int, GL_TANGENT_ARRAY_STRIDE_EXT, 0x843F) \
	CONST(int, GL_BINORMAL_ARRAY_TYPE_EXT, 0x8440) \
	CONST(int, GL_BINORMAL_ARRAY_STRIDE_EXT, 0x8441) \
	CONST(int, GL_TANGENT_ARRAY_POINTER_EXT, 0x8442) \
	CONST(int, GL_BINORMAL_ARRAY_POINTER_EXT, 0x8443) \
	CONST(int, GL_MAP1_TANGENT_EXT, 0x8444) \
	CONST(int, GL_MAP2_TANGENT_EXT, 0x8445) \
	CONST(int, GL_MAP1_BINORMAL_EXT, 0x8446) \
	CONST(int, GL_MAP2_BINORMAL_EXT, 0x8447) \
	FUNC(void , glTangent3bEXT, GLTANGENT3BEXT, (GLbyte tx , GLbyte ty , GLbyte tz ), (tx, ty, tz)) \
	FUNC(void , glTangent3bvEXT, GLTANGENT3BVEXT, (const GLbyte * v ), (v)) \
	FUNC(void , glTangent3dEXT, GLTANGENT3DEXT, (GLdouble tx , GLdouble ty , GLdouble tz ), (tx, ty, tz)) \
	FUNC(void , glTangent3dvEXT, GLTANGENT3DVEXT, (const GLdouble * v ), (v)) \
	FUNC(void , glTangent3fEXT, GLTANGENT3FEXT, (GLfloat tx , GLfloat ty , GLfloat tz ), (tx, ty, tz)) \
	FUNC(void , glTangent3fvEXT, GLTANGENT3FVEXT, (const GLfloat * v ), (v)) \
	FUNC(void , glTangent3iEXT, GLTANGENT3IEXT, (GLint tx , GLint ty , GLint tz ), (tx, ty, tz)) \
	FUNC(void , glTangent3ivEXT, GLTANGENT3IVEXT, (const GLint * v ), (v)) \
	FUNC(void , glTangent3sEXT, GLTANGENT3SEXT, (GLshort tx , GLshort ty , GLshort tz ), (tx, ty, tz)) \
	FUNC(void , glTangent3svEXT, GLTANGENT3SVEXT, (const GLshort * v ), (v)) \
	FUNC(void , glBinormal3bEXT, GLBINORMAL3BEXT, (GLbyte bx , GLbyte by , GLbyte bz ), (bx, by, bz)) \
	FUNC(void , glBinormal3bvEXT, GLBINORMAL3BVEXT, (const GLbyte * v ), (v)) \
	FUNC(void , glBinormal3dEXT, GLBINORMAL3DEXT, (GLdouble bx , GLdouble by , GLdouble bz ), (bx, by, bz)) \
	FUNC(void , glBinormal3dvEXT, GLBINORMAL3DVEXT, (const GLdouble * v ), (v)) \
	FUNC(void , glBinormal3fEXT, GLBINORMAL3FEXT, (GLfloat bx , GLfloat by , GLfloat bz ), (bx, by, bz)) \
	FUNC(void , glBinormal3fvEXT, GLBINORMAL3FVEXT, (const GLfloat * v ), (v)) \
	FUNC(void , glBinormal3iEXT, GLBINORMAL3IEXT, (GLint bx , GLint by , GLint bz ), (bx, by, bz)) \
	FUNC(void , glBinormal3ivEXT, GLBINORMAL3IVEXT, (const GLint * v ), (v)) \
	FUNC(void , glBinormal3sEXT, GLBINORMAL3SEXT, (GLshort bx , GLshort by , GLshort bz ), (bx, by, bz)) \
	FUNC(void , glBinormal3svEXT, GLBINORMAL3SVEXT, (const GLshort * v ), (v)) \
	FUNC(void , glTangentPointerEXT, GLTANGENTPOINTEREXT, (GLenum type , GLsizei stride , const GLvoid * pointer ), (type, stride, pointer)) \
	FUNC(void , glBinormalPointerEXT, GLBINORMALPOINTEREXT, (GLenum type , GLsizei stride , const GLvoid * pointer ), (type, stride, pointer)) \
	END()
#else
#define EXTENSION_GL_EXT_coordinate_frame(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_copy_texture
#define GL_EXT_copy_texture 1
#define EXTENSION_GL_EXT_copy_texture(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_copy_texture) \
	FUNC(void , glCopyTexImage1DEXT, GLCOPYTEXIMAGE1DEXT, (GLenum target , GLint level , GLenum internalformat , GLint x , GLint y , GLsizei width , GLint border ), (target, level, internalformat, x, y, width, border)) \
	FUNC(void , glCopyTexImage2DEXT, GLCOPYTEXIMAGE2DEXT, (GLenum target , GLint level , GLenum internalformat , GLint x , GLint y , GLsizei width , GLsizei height , GLint border ), (target, level, internalformat, x, y, width, height, border)) \
	FUNC(void , glCopyTexSubImage1DEXT, GLCOPYTEXSUBIMAGE1DEXT, (GLenum target , GLint level , GLint xoffset , GLint x , GLint y , GLsizei width ), (target, level, xoffset, x, y, width)) \
	FUNC(void , glCopyTexSubImage2DEXT, GLCOPYTEXSUBIMAGE2DEXT, (GLenum target , GLint level , GLint xoffset , GLint yoffset , GLint x , GLint y , GLsizei width , GLsizei height ), (target, level, xoffset, yoffset, x, y, width, height)) \
	FUNC(void , glCopyTexSubImage3DEXT, GLCOPYTEXSUBIMAGE3DEXT, (GLenum target , GLint level , GLint xoffset , GLint yoffset , GLint zoffset , GLint x , GLint y , GLsizei width , GLsizei height ), (target, level, xoffset, yoffset, zoffset, x, y, width, height)) \
	END()
#else
#define EXTENSION_GL_EXT_copy_texture(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_cull_vertex
#define GL_EXT_cull_vertex 1
#define EXTENSION_GL_EXT_cull_vertex(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_cull_vertex) \
	CONST(int, GL_CULL_VERTEX_EXT, 0x81AA) \
	CONST(int, GL_CULL_VERTEX_EYE_POSITION_EXT, 0x81AB) \
	CONST(int, GL_CULL_VERTEX_OBJECT_POSITION_EXT, 0x81AC) \
	FUNC(void , glCullParameterdvEXT, GLCULLPARAMETERDVEXT, (GLenum pname , GLdouble * params ), (pname, params)) \
	FUNC(void , glCullParameterfvEXT, GLCULLPARAMETERFVEXT, (GLenum pname , GLfloat * params ), (pname, params)) \
	END()
#else
#define EXTENSION_GL_EXT_cull_vertex(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_depth_bounds_test
#define GL_EXT_depth_bounds_test 1
#define EXTENSION_GL_EXT_depth_bounds_test(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_depth_bounds_test) \
	CONST(int, GL_DEPTH_BOUNDS_TEST_EXT, 0x8890) \
	CONST(int, GL_DEPTH_BOUNDS_EXT, 0x8891) \
	FUNC(void , glDepthBoundsEXT, GLDEPTHBOUNDSEXT, (GLclampd zmin , GLclampd zmax ), (zmin, zmax)) \
	END()
#else
#define EXTENSION_GL_EXT_depth_bounds_test(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_direct_state_access
#define GL_EXT_direct_state_access 1
#define EXTENSION_GL_EXT_direct_state_access(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_direct_state_access) \
	CONST(int, GL_PROGRAM_MATRIX_EXT, 0x8E2D) \
	CONST(int, GL_TRANSPOSE_PROGRAM_MATRIX_EXT, 0x8E2E) \
	CONST(int, GL_PROGRAM_MATRIX_STACK_DEPTH_EXT, 0x8E2F) \
	FUNC(void , glClientAttribDefaultEXT, GLCLIENTATTRIBDEFAULTEXT, (GLbitfield mask ), (mask)) \
	FUNC(void , glPushClientAttribDefaultEXT, GLPUSHCLIENTATTRIBDEFAULTEXT, (GLbitfield mask ), (mask)) \
	FUNC(void , glMatrixLoadfEXT, GLMATRIXLOADFEXT, (GLenum mode , const GLfloat * m ), (mode, m)) \
	FUNC(void , glMatrixLoaddEXT, GLMATRIXLOADDEXT, (GLenum mode , const GLdouble * m ), (mode, m)) \
	FUNC(void , glMatrixMultfEXT, GLMATRIXMULTFEXT, (GLenum mode , const GLfloat * m ), (mode, m)) \
	FUNC(void , glMatrixMultdEXT, GLMATRIXMULTDEXT, (GLenum mode , const GLdouble * m ), (mode, m)) \
	FUNC(void , glMatrixLoadIdentityEXT, GLMATRIXLOADIDENTITYEXT, (GLenum mode ), (mode)) \
	FUNC(void , glMatrixRotatefEXT, GLMATRIXROTATEFEXT, (GLenum mode , GLfloat angle , GLfloat x , GLfloat y , GLfloat z ), (mode, angle, x, y, z)) \
	FUNC(void , glMatrixRotatedEXT, GLMATRIXROTATEDEXT, (GLenum mode , GLdouble angle , GLdouble x , GLdouble y , GLdouble z ), (mode, angle, x, y, z)) \
	FUNC(void , glMatrixScalefEXT, GLMATRIXSCALEFEXT, (GLenum mode , GLfloat x , GLfloat y , GLfloat z ), (mode, x, y, z)) \
	FUNC(void , glMatrixScaledEXT, GLMATRIXSCALEDEXT, (GLenum mode , GLdouble x , GLdouble y , GLdouble z ), (mode, x, y, z)) \
	FUNC(void , glMatrixTranslatefEXT, GLMATRIXTRANSLATEFEXT, (GLenum mode , GLfloat x , GLfloat y , GLfloat z ), (mode, x, y, z)) \
	FUNC(void , glMatrixTranslatedEXT, GLMATRIXTRANSLATEDEXT, (GLenum mode , GLdouble x , GLdouble y , GLdouble z ), (mode, x, y, z)) \
	FUNC(void , glMatrixFrustumEXT, GLMATRIXFRUSTUMEXT, (GLenum mode , GLdouble left , GLdouble right , GLdouble bottom , GLdouble top , GLdouble zNear , GLdouble zFar ), (mode, left, right, bottom, top, zNear, zFar)) \
	FUNC(void , glMatrixOrthoEXT, GLMATRIXORTHOEXT, (GLenum mode , GLdouble left , GLdouble right , GLdouble bottom , GLdouble top , GLdouble zNear , GLdouble zFar ), (mode, left, right, bottom, top, zNear, zFar)) \
	FUNC(void , glMatrixPopEXT, GLMATRIXPOPEXT, (GLenum mode ), (mode)) \
	FUNC(void , glMatrixPushEXT, GLMATRIXPUSHEXT, (GLenum mode ), (mode)) \
	FUNC(void , glMatrixLoadTransposefEXT, GLMATRIXLOADTRANSPOSEFEXT, (GLenum mode , const GLfloat * m ), (mode, m)) \
	FUNC(void , glMatrixLoadTransposedEXT, GLMATRIXLOADTRANSPOSEDEXT, (GLenum mode , const GLdouble * m ), (mode, m)) \
	FUNC(void , glMatrixMultTransposefEXT, GLMATRIXMULTTRANSPOSEFEXT, (GLenum mode , const GLfloat * m ), (mode, m)) \
	FUNC(void , glMatrixMultTransposedEXT, GLMATRIXMULTTRANSPOSEDEXT, (GLenum mode , const GLdouble * m ), (mode, m)) \
	FUNC(void , glTextureParameterfEXT, GLTEXTUREPARAMETERFEXT, (GLuint texture , GLenum target , GLenum pname , GLfloat param ), (texture, target, pname, param)) \
	FUNC(void , glTextureParameterfvEXT, GLTEXTUREPARAMETERFVEXT, (GLuint texture , GLenum target , GLenum pname , const GLfloat * params ), (texture, target, pname, params)) \
	FUNC(void , glTextureParameteriEXT, GLTEXTUREPARAMETERIEXT, (GLuint texture , GLenum target , GLenum pname , GLint param ), (texture, target, pname, param)) \
	FUNC(void , glTextureParameterivEXT, GLTEXTUREPARAMETERIVEXT, (GLuint texture , GLenum target , GLenum pname , const GLint * params ), (texture, target, pname, params)) \
	FUNC(void , glTextureImage1DEXT, GLTEXTUREIMAGE1DEXT, (GLuint texture , GLenum target , GLint level , GLenum internalformat , GLsizei width , GLint border , GLenum format , GLenum type , const GLvoid * pixels ), (texture, target, level, internalformat, width, border, format, type, pixels)) \
	FUNC(void , glTextureImage2DEXT, GLTEXTUREIMAGE2DEXT, (GLuint texture , GLenum target , GLint level , GLenum internalformat , GLsizei width , GLsizei height , GLint border , GLenum format , GLenum type , const GLvoid * pixels ), (texture, target, level, internalformat, width, height, border, format, type, pixels)) \
	FUNC(void , glTextureSubImage1DEXT, GLTEXTURESUBIMAGE1DEXT, (GLuint texture , GLenum target , GLint level , GLint xoffset , GLsizei width , GLenum format , GLenum type , const GLvoid * pixels ), (texture, target, level, xoffset, width, format, type, pixels)) \
	FUNC(void , glTextureSubImage2DEXT, GLTEXTURESUBIMAGE2DEXT, (GLuint texture , GLenum target , GLint level , GLint xoffset , GLint yoffset , GLsizei width , GLsizei height , GLenum format , GLenum type , const GLvoid * pixels ), (texture, target, level, xoffset, yoffset, width, height, format, type, pixels)) \
	FUNC(void , glCopyTextureImage1DEXT, GLCOPYTEXTUREIMAGE1DEXT, (GLuint texture , GLenum target , GLint level , GLenum internalformat , GLint x , GLint y , GLsizei width , GLint border ), (texture, target, level, internalformat, x, y, width, border)) \
	FUNC(void , glCopyTextureImage2DEXT, GLCOPYTEXTUREIMAGE2DEXT, (GLuint texture , GLenum target , GLint level , GLenum internalformat , GLint x , GLint y , GLsizei width , GLsizei height , GLint border ), (texture, target, level, internalformat, x, y, width, height, border)) \
	FUNC(void , glCopyTextureSubImage1DEXT, GLCOPYTEXTURESUBIMAGE1DEXT, (GLuint texture , GLenum target , GLint level , GLint xoffset , GLint x , GLint y , GLsizei width ), (texture, target, level, xoffset, x, y, width)) \
	FUNC(void , glCopyTextureSubImage2DEXT, GLCOPYTEXTURESUBIMAGE2DEXT, (GLuint texture , GLenum target , GLint level , GLint xoffset , GLint yoffset , GLint x , GLint y , GLsizei width , GLsizei height ), (texture, target, level, xoffset, yoffset, x, y, width, height)) \
	FUNC(void , glGetTextureImageEXT, GLGETTEXTUREIMAGEEXT, (GLuint texture , GLenum target , GLint level , GLenum format , GLenum type , GLvoid * pixels ), (texture, target, level, format, type, pixels)) \
	FUNC(void , glGetTextureParameterfvEXT, GLGETTEXTUREPARAMETERFVEXT, (GLuint texture , GLenum target , GLenum pname , GLfloat * params ), (texture, target, pname, params)) \
	FUNC(void , glGetTextureParameterivEXT, GLGETTEXTUREPARAMETERIVEXT, (GLuint texture , GLenum target , GLenum pname , GLint * params ), (texture, target, pname, params)) \
	FUNC(void , glGetTextureLevelParameterfvEXT, GLGETTEXTURELEVELPARAMETERFVEXT, (GLuint texture , GLenum target , GLint level , GLenum pname , GLfloat * params ), (texture, target, level, pname, params)) \
	FUNC(void , glGetTextureLevelParameterivEXT, GLGETTEXTURELEVELPARAMETERIVEXT, (GLuint texture , GLenum target , GLint level , GLenum pname , GLint * params ), (texture, target, level, pname, params)) \
	FUNC(void , glTextureImage3DEXT, GLTEXTUREIMAGE3DEXT, (GLuint texture , GLenum target , GLint level , GLenum internalformat , GLsizei width , GLsizei height , GLsizei depth , GLint border , GLenum format , GLenum type , const GLvoid * pixels ), (texture, target, level, internalformat, width, height, depth, border, format, type, pixels)) \
	FUNC(void , glTextureSubImage3DEXT, GLTEXTURESUBIMAGE3DEXT, (GLuint texture , GLenum target , GLint level , GLint xoffset , GLint yoffset , GLint zoffset , GLsizei width , GLsizei height , GLsizei depth , GLenum format , GLenum type , const GLvoid * pixels ), (texture, target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels)) \
	FUNC(void , glCopyTextureSubImage3DEXT, GLCOPYTEXTURESUBIMAGE3DEXT, (GLuint texture , GLenum target , GLint level , GLint xoffset , GLint yoffset , GLint zoffset , GLint x , GLint y , GLsizei width , GLsizei height ), (texture, target, level, xoffset, yoffset, zoffset, x, y, width, height)) \
	FUNC(void , glMultiTexParameterfEXT, GLMULTITEXPARAMETERFEXT, (GLenum texunit , GLenum target , GLenum pname , GLfloat param ), (texunit, target, pname, param)) \
	FUNC(void , glMultiTexParameterfvEXT, GLMULTITEXPARAMETERFVEXT, (GLenum texunit , GLenum target , GLenum pname , const GLfloat * params ), (texunit, target, pname, params)) \
	FUNC(void , glMultiTexParameteriEXT, GLMULTITEXPARAMETERIEXT, (GLenum texunit , GLenum target , GLenum pname , GLint param ), (texunit, target, pname, param)) \
	FUNC(void , glMultiTexParameterivEXT, GLMULTITEXPARAMETERIVEXT, (GLenum texunit , GLenum target , GLenum pname , const GLint * params ), (texunit, target, pname, params)) \
	FUNC(void , glMultiTexImage1DEXT, GLMULTITEXIMAGE1DEXT, (GLenum texunit , GLenum target , GLint level , GLenum internalformat , GLsizei width , GLint border , GLenum format , GLenum type , const GLvoid * pixels ), (texunit, target, level, internalformat, width, border, format, type, pixels)) \
	FUNC(void , glMultiTexImage2DEXT, GLMULTITEXIMAGE2DEXT, (GLenum texunit , GLenum target , GLint level , GLenum internalformat , GLsizei width , GLsizei height , GLint border , GLenum format , GLenum type , const GLvoid * pixels ), (texunit, target, level, internalformat, width, height, border, format, type, pixels)) \
	FUNC(void , glMultiTexSubImage1DEXT, GLMULTITEXSUBIMAGE1DEXT, (GLenum texunit , GLenum target , GLint level , GLint xoffset , GLsizei width , GLenum format , GLenum type , const GLvoid * pixels ), (texunit, target, level, xoffset, width, format, type, pixels)) \
	FUNC(void , glMultiTexSubImage2DEXT, GLMULTITEXSUBIMAGE2DEXT, (GLenum texunit , GLenum target , GLint level , GLint xoffset , GLint yoffset , GLsizei width , GLsizei height , GLenum format , GLenum type , const GLvoid * pixels ), (texunit, target, level, xoffset, yoffset, width, height, format, type, pixels)) \
	FUNC(void , glCopyMultiTexImage1DEXT, GLCOPYMULTITEXIMAGE1DEXT, (GLenum texunit , GLenum target , GLint level , GLenum internalformat , GLint x , GLint y , GLsizei width , GLint border ), (texunit, target, level, internalformat, x, y, width, border)) \
	FUNC(void , glCopyMultiTexImage2DEXT, GLCOPYMULTITEXIMAGE2DEXT, (GLenum texunit , GLenum target , GLint level , GLenum internalformat , GLint x , GLint y , GLsizei width , GLsizei height , GLint border ), (texunit, target, level, internalformat, x, y, width, height, border)) \
	FUNC(void , glCopyMultiTexSubImage1DEXT, GLCOPYMULTITEXSUBIMAGE1DEXT, (GLenum texunit , GLenum target , GLint level , GLint xoffset , GLint x , GLint y , GLsizei width ), (texunit, target, level, xoffset, x, y, width)) \
	FUNC(void , glCopyMultiTexSubImage2DEXT, GLCOPYMULTITEXSUBIMAGE2DEXT, (GLenum texunit , GLenum target , GLint level , GLint xoffset , GLint yoffset , GLint x , GLint y , GLsizei width , GLsizei height ), (texunit, target, level, xoffset, yoffset, x, y, width, height)) \
	FUNC(void , glGetMultiTexImageEXT, GLGETMULTITEXIMAGEEXT, (GLenum texunit , GLenum target , GLint level , GLenum format , GLenum type , GLvoid * pixels ), (texunit, target, level, format, type, pixels)) \
	FUNC(void , glGetMultiTexParameterfvEXT, GLGETMULTITEXPARAMETERFVEXT, (GLenum texunit , GLenum target , GLenum pname , GLfloat * params ), (texunit, target, pname, params)) \
	FUNC(void , glGetMultiTexParameterivEXT, GLGETMULTITEXPARAMETERIVEXT, (GLenum texunit , GLenum target , GLenum pname , GLint * params ), (texunit, target, pname, params)) \
	FUNC(void , glGetMultiTexLevelParameterfvEXT, GLGETMULTITEXLEVELPARAMETERFVEXT, (GLenum texunit , GLenum target , GLint level , GLenum pname , GLfloat * params ), (texunit, target, level, pname, params)) \
	FUNC(void , glGetMultiTexLevelParameterivEXT, GLGETMULTITEXLEVELPARAMETERIVEXT, (GLenum texunit , GLenum target , GLint level , GLenum pname , GLint * params ), (texunit, target, level, pname, params)) \
	FUNC(void , glMultiTexImage3DEXT, GLMULTITEXIMAGE3DEXT, (GLenum texunit , GLenum target , GLint level , GLenum internalformat , GLsizei width , GLsizei height , GLsizei depth , GLint border , GLenum format , GLenum type , const GLvoid * pixels ), (texunit, target, level, internalformat, width, height, depth, border, format, type, pixels)) \
	FUNC(void , glMultiTexSubImage3DEXT, GLMULTITEXSUBIMAGE3DEXT, (GLenum texunit , GLenum target , GLint level , GLint xoffset , GLint yoffset , GLint zoffset , GLsizei width , GLsizei height , GLsizei depth , GLenum format , GLenum type , const GLvoid * pixels ), (texunit, target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels)) \
	FUNC(void , glCopyMultiTexSubImage3DEXT, GLCOPYMULTITEXSUBIMAGE3DEXT, (GLenum texunit , GLenum target , GLint level , GLint xoffset , GLint yoffset , GLint zoffset , GLint x , GLint y , GLsizei width , GLsizei height ), (texunit, target, level, xoffset, yoffset, zoffset, x, y, width, height)) \
	FUNC(void , glBindMultiTextureEXT, GLBINDMULTITEXTUREEXT, (GLenum texunit , GLenum target , GLuint texture ), (texunit, target, texture)) \
	FUNC(void , glEnableClientStateIndexedEXT, GLENABLECLIENTSTATEINDEXEDEXT, (GLenum array , GLuint index ), (array, index)) \
	FUNC(void , glDisableClientStateIndexedEXT, GLDISABLECLIENTSTATEINDEXEDEXT, (GLenum array , GLuint index ), (array, index)) \
	FUNC(void , glMultiTexCoordPointerEXT, GLMULTITEXCOORDPOINTEREXT, (GLenum texunit , GLint size , GLenum type , GLsizei stride , const GLvoid * pointer ), (texunit, size, type, stride, pointer)) \
	FUNC(void , glMultiTexEnvfEXT, GLMULTITEXENVFEXT, (GLenum texunit , GLenum target , GLenum pname , GLfloat param ), (texunit, target, pname, param)) \
	FUNC(void , glMultiTexEnvfvEXT, GLMULTITEXENVFVEXT, (GLenum texunit , GLenum target , GLenum pname , const GLfloat * params ), (texunit, target, pname, params)) \
	FUNC(void , glMultiTexEnviEXT, GLMULTITEXENVIEXT, (GLenum texunit , GLenum target , GLenum pname , GLint param ), (texunit, target, pname, param)) \
	FUNC(void , glMultiTexEnvivEXT, GLMULTITEXENVIVEXT, (GLenum texunit , GLenum target , GLenum pname , const GLint * params ), (texunit, target, pname, params)) \
	FUNC(void , glMultiTexGendEXT, GLMULTITEXGENDEXT, (GLenum texunit , GLenum coord , GLenum pname , GLdouble param ), (texunit, coord, pname, param)) \
	FUNC(void , glMultiTexGendvEXT, GLMULTITEXGENDVEXT, (GLenum texunit , GLenum coord , GLenum pname , const GLdouble * params ), (texunit, coord, pname, params)) \
	FUNC(void , glMultiTexGenfEXT, GLMULTITEXGENFEXT, (GLenum texunit , GLenum coord , GLenum pname , GLfloat param ), (texunit, coord, pname, param)) \
	FUNC(void , glMultiTexGenfvEXT, GLMULTITEXGENFVEXT, (GLenum texunit , GLenum coord , GLenum pname , const GLfloat * params ), (texunit, coord, pname, params)) \
	FUNC(void , glMultiTexGeniEXT, GLMULTITEXGENIEXT, (GLenum texunit , GLenum coord , GLenum pname , GLint param ), (texunit, coord, pname, param)) \
	FUNC(void , glMultiTexGenivEXT, GLMULTITEXGENIVEXT, (GLenum texunit , GLenum coord , GLenum pname , const GLint * params ), (texunit, coord, pname, params)) \
	FUNC(void , glGetMultiTexEnvfvEXT, GLGETMULTITEXENVFVEXT, (GLenum texunit , GLenum target , GLenum pname , GLfloat * params ), (texunit, target, pname, params)) \
	FUNC(void , glGetMultiTexEnvivEXT, GLGETMULTITEXENVIVEXT, (GLenum texunit , GLenum target , GLenum pname , GLint * params ), (texunit, target, pname, params)) \
	FUNC(void , glGetMultiTexGendvEXT, GLGETMULTITEXGENDVEXT, (GLenum texunit , GLenum coord , GLenum pname , GLdouble * params ), (texunit, coord, pname, params)) \
	FUNC(void , glGetMultiTexGenfvEXT, GLGETMULTITEXGENFVEXT, (GLenum texunit , GLenum coord , GLenum pname , GLfloat * params ), (texunit, coord, pname, params)) \
	FUNC(void , glGetMultiTexGenivEXT, GLGETMULTITEXGENIVEXT, (GLenum texunit , GLenum coord , GLenum pname , GLint * params ), (texunit, coord, pname, params)) \
	FUNC(void , glGetFloatIndexedvEXT, GLGETFLOATINDEXEDVEXT, (GLenum target , GLuint index , GLfloat * data ), (target, index, data)) \
	FUNC(void , glGetDoubleIndexedvEXT, GLGETDOUBLEINDEXEDVEXT, (GLenum target , GLuint index , GLdouble * data ), (target, index, data)) \
	FUNC(void , glGetPointerIndexedvEXT, GLGETPOINTERINDEXEDVEXT, (GLenum target , GLuint index , GLvoid * * data ), (target, index, data)) \
	FUNC(void , glCompressedTextureImage3DEXT, GLCOMPRESSEDTEXTUREIMAGE3DEXT, (GLuint texture , GLenum target , GLint level , GLenum internalformat , GLsizei width , GLsizei height , GLsizei depth , GLint border , GLsizei imageSize , const GLvoid * bits ), (texture, target, level, internalformat, width, height, depth, border, imageSize, bits)) \
	FUNC(void , glCompressedTextureImage2DEXT, GLCOMPRESSEDTEXTUREIMAGE2DEXT, (GLuint texture , GLenum target , GLint level , GLenum internalformat , GLsizei width , GLsizei height , GLint border , GLsizei imageSize , const GLvoid * bits ), (texture, target, level, internalformat, width, height, border, imageSize, bits)) \
	FUNC(void , glCompressedTextureImage1DEXT, GLCOMPRESSEDTEXTUREIMAGE1DEXT, (GLuint texture , GLenum target , GLint level , GLenum internalformat , GLsizei width , GLint border , GLsizei imageSize , const GLvoid * bits ), (texture, target, level, internalformat, width, border, imageSize, bits)) \
	FUNC(void , glCompressedTextureSubImage3DEXT, GLCOMPRESSEDTEXTURESUBIMAGE3DEXT, (GLuint texture , GLenum target , GLint level , GLint xoffset , GLint yoffset , GLint zoffset , GLsizei width , GLsizei height , GLsizei depth , GLenum format , GLsizei imageSize , const GLvoid * bits ), (texture, target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, bits)) \
	FUNC(void , glCompressedTextureSubImage2DEXT, GLCOMPRESSEDTEXTURESUBIMAGE2DEXT, (GLuint texture , GLenum target , GLint level , GLint xoffset , GLint yoffset , GLsizei width , GLsizei height , GLenum format , GLsizei imageSize , const GLvoid * bits ), (texture, target, level, xoffset, yoffset, width, height, format, imageSize, bits)) \
	FUNC(void , glCompressedTextureSubImage1DEXT, GLCOMPRESSEDTEXTURESUBIMAGE1DEXT, (GLuint texture , GLenum target , GLint level , GLint xoffset , GLsizei width , GLenum format , GLsizei imageSize , const GLvoid * bits ), (texture, target, level, xoffset, width, format, imageSize, bits)) \
	FUNC(void , glGetCompressedTextureImageEXT, GLGETCOMPRESSEDTEXTUREIMAGEEXT, (GLuint texture , GLenum target , GLint lod , GLvoid * img ), (texture, target, lod, img)) \
	FUNC(void , glCompressedMultiTexImage3DEXT, GLCOMPRESSEDMULTITEXIMAGE3DEXT, (GLenum texunit , GLenum target , GLint level , GLenum internalformat , GLsizei width , GLsizei height , GLsizei depth , GLint border , GLsizei imageSize , const GLvoid * bits ), (texunit, target, level, internalformat, width, height, depth, border, imageSize, bits)) \
	FUNC(void , glCompressedMultiTexImage2DEXT, GLCOMPRESSEDMULTITEXIMAGE2DEXT, (GLenum texunit , GLenum target , GLint level , GLenum internalformat , GLsizei width , GLsizei height , GLint border , GLsizei imageSize , const GLvoid * bits ), (texunit, target, level, internalformat, width, height, border, imageSize, bits)) \
	FUNC(void , glCompressedMultiTexImage1DEXT, GLCOMPRESSEDMULTITEXIMAGE1DEXT, (GLenum texunit , GLenum target , GLint level , GLenum internalformat , GLsizei width , GLint border , GLsizei imageSize , const GLvoid * bits ), (texunit, target, level, internalformat, width, border, imageSize, bits)) \
	FUNC(void , glCompressedMultiTexSubImage3DEXT, GLCOMPRESSEDMULTITEXSUBIMAGE3DEXT, (GLenum texunit , GLenum target , GLint level , GLint xoffset , GLint yoffset , GLint zoffset , GLsizei width , GLsizei height , GLsizei depth , GLenum format , GLsizei imageSize , const GLvoid * bits ), (texunit, target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, bits)) \
	FUNC(void , glCompressedMultiTexSubImage2DEXT, GLCOMPRESSEDMULTITEXSUBIMAGE2DEXT, (GLenum texunit , GLenum target , GLint level , GLint xoffset , GLint yoffset , GLsizei width , GLsizei height , GLenum format , GLsizei imageSize , const GLvoid * bits ), (texunit, target, level, xoffset, yoffset, width, height, format, imageSize, bits)) \
	FUNC(void , glCompressedMultiTexSubImage1DEXT, GLCOMPRESSEDMULTITEXSUBIMAGE1DEXT, (GLenum texunit , GLenum target , GLint level , GLint xoffset , GLsizei width , GLenum format , GLsizei imageSize , const GLvoid * bits ), (texunit, target, level, xoffset, width, format, imageSize, bits)) \
	FUNC(void , glGetCompressedMultiTexImageEXT, GLGETCOMPRESSEDMULTITEXIMAGEEXT, (GLenum texunit , GLenum target , GLint lod , GLvoid * img ), (texunit, target, lod, img)) \
	FUNC(void , glNamedProgramStringEXT, GLNAMEDPROGRAMSTRINGEXT, (GLuint program , GLenum target , GLenum format , GLsizei len , const GLvoid * string ), (program, target, format, len, string)) \
	FUNC(void , glNamedProgramLocalParameter4dEXT, GLNAMEDPROGRAMLOCALPARAMETER4DEXT, (GLuint program , GLenum target , GLuint index , GLdouble x , GLdouble y , GLdouble z , GLdouble w ), (program, target, index, x, y, z, w)) \
	FUNC(void , glNamedProgramLocalParameter4dvEXT, GLNAMEDPROGRAMLOCALPARAMETER4DVEXT, (GLuint program , GLenum target , GLuint index , const GLdouble * params ), (program, target, index, params)) \
	FUNC(void , glNamedProgramLocalParameter4fEXT, GLNAMEDPROGRAMLOCALPARAMETER4FEXT, (GLuint program , GLenum target , GLuint index , GLfloat x , GLfloat y , GLfloat z , GLfloat w ), (program, target, index, x, y, z, w)) \
	FUNC(void , glNamedProgramLocalParameter4fvEXT, GLNAMEDPROGRAMLOCALPARAMETER4FVEXT, (GLuint program , GLenum target , GLuint index , const GLfloat * params ), (program, target, index, params)) \
	FUNC(void , glGetNamedProgramLocalParameterdvEXT, GLGETNAMEDPROGRAMLOCALPARAMETERDVEXT, (GLuint program , GLenum target , GLuint index , GLdouble * params ), (program, target, index, params)) \
	FUNC(void , glGetNamedProgramLocalParameterfvEXT, GLGETNAMEDPROGRAMLOCALPARAMETERFVEXT, (GLuint program , GLenum target , GLuint index , GLfloat * params ), (program, target, index, params)) \
	FUNC(void , glGetNamedProgramivEXT, GLGETNAMEDPROGRAMIVEXT, (GLuint program , GLenum target , GLenum pname , GLint * params ), (program, target, pname, params)) \
	FUNC(void , glGetNamedProgramStringEXT, GLGETNAMEDPROGRAMSTRINGEXT, (GLuint program , GLenum target , GLenum pname , GLvoid * string ), (program, target, pname, string)) \
	FUNC(void , glNamedProgramLocalParameters4fvEXT, GLNAMEDPROGRAMLOCALPARAMETERS4FVEXT, (GLuint program , GLenum target , GLuint index , GLsizei count , const GLfloat * params ), (program, target, index, count, params)) \
	FUNC(void , glNamedProgramLocalParameterI4iEXT, GLNAMEDPROGRAMLOCALPARAMETERI4IEXT, (GLuint program , GLenum target , GLuint index , GLint x , GLint y , GLint z , GLint w ), (program, target, index, x, y, z, w)) \
	FUNC(void , glNamedProgramLocalParameterI4ivEXT, GLNAMEDPROGRAMLOCALPARAMETERI4IVEXT, (GLuint program , GLenum target , GLuint index , const GLint * params ), (program, target, index, params)) \
	FUNC(void , glNamedProgramLocalParametersI4ivEXT, GLNAMEDPROGRAMLOCALPARAMETERSI4IVEXT, (GLuint program , GLenum target , GLuint index , GLsizei count , const GLint * params ), (program, target, index, count, params)) \
	FUNC(void , glNamedProgramLocalParameterI4uiEXT, GLNAMEDPROGRAMLOCALPARAMETERI4UIEXT, (GLuint program , GLenum target , GLuint index , GLuint x , GLuint y , GLuint z , GLuint w ), (program, target, index, x, y, z, w)) \
	FUNC(void , glNamedProgramLocalParameterI4uivEXT, GLNAMEDPROGRAMLOCALPARAMETERI4UIVEXT, (GLuint program , GLenum target , GLuint index , const GLuint * params ), (program, target, index, params)) \
	FUNC(void , glNamedProgramLocalParametersI4uivEXT, GLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXT, (GLuint program , GLenum target , GLuint index , GLsizei count , const GLuint * params ), (program, target, index, count, params)) \
	FUNC(void , glGetNamedProgramLocalParameterIivEXT, GLGETNAMEDPROGRAMLOCALPARAMETERIIVEXT, (GLuint program , GLenum target , GLuint index , GLint * params ), (program, target, index, params)) \
	FUNC(void , glGetNamedProgramLocalParameterIuivEXT, GLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXT, (GLuint program , GLenum target , GLuint index , GLuint * params ), (program, target, index, params)) \
	FUNC(void , glTextureParameterIivEXT, GLTEXTUREPARAMETERIIVEXT, (GLuint texture , GLenum target , GLenum pname , const GLint * params ), (texture, target, pname, params)) \
	FUNC(void , glTextureParameterIuivEXT, GLTEXTUREPARAMETERIUIVEXT, (GLuint texture , GLenum target , GLenum pname , const GLuint * params ), (texture, target, pname, params)) \
	FUNC(void , glGetTextureParameterIivEXT, GLGETTEXTUREPARAMETERIIVEXT, (GLuint texture , GLenum target , GLenum pname , GLint * params ), (texture, target, pname, params)) \
	FUNC(void , glGetTextureParameterIuivEXT, GLGETTEXTUREPARAMETERIUIVEXT, (GLuint texture , GLenum target , GLenum pname , GLuint * params ), (texture, target, pname, params)) \
	FUNC(void , glMultiTexParameterIivEXT, GLMULTITEXPARAMETERIIVEXT, (GLenum texunit , GLenum target , GLenum pname , const GLint * params ), (texunit, target, pname, params)) \
	FUNC(void , glMultiTexParameterIuivEXT, GLMULTITEXPARAMETERIUIVEXT, (GLenum texunit , GLenum target , GLenum pname , const GLuint * params ), (texunit, target, pname, params)) \
	FUNC(void , glGetMultiTexParameterIivEXT, GLGETMULTITEXPARAMETERIIVEXT, (GLenum texunit , GLenum target , GLenum pname , GLint * params ), (texunit, target, pname, params)) \
	FUNC(void , glGetMultiTexParameterIuivEXT, GLGETMULTITEXPARAMETERIUIVEXT, (GLenum texunit , GLenum target , GLenum pname , GLuint * params ), (texunit, target, pname, params)) \
	FUNC(void , glProgramUniform1fEXT, GLPROGRAMUNIFORM1FEXT, (GLuint program , GLint location , GLfloat v0 ), (program, location, v0)) \
	FUNC(void , glProgramUniform2fEXT, GLPROGRAMUNIFORM2FEXT, (GLuint program , GLint location , GLfloat v0 , GLfloat v1 ), (program, location, v0, v1)) \
	FUNC(void , glProgramUniform3fEXT, GLPROGRAMUNIFORM3FEXT, (GLuint program , GLint location , GLfloat v0 , GLfloat v1 , GLfloat v2 ), (program, location, v0, v1, v2)) \
	FUNC(void , glProgramUniform4fEXT, GLPROGRAMUNIFORM4FEXT, (GLuint program , GLint location , GLfloat v0 , GLfloat v1 , GLfloat v2 , GLfloat v3 ), (program, location, v0, v1, v2, v3)) \
	FUNC(void , glProgramUniform1iEXT, GLPROGRAMUNIFORM1IEXT, (GLuint program , GLint location , GLint v0 ), (program, location, v0)) \
	FUNC(void , glProgramUniform2iEXT, GLPROGRAMUNIFORM2IEXT, (GLuint program , GLint location , GLint v0 , GLint v1 ), (program, location, v0, v1)) \
	FUNC(void , glProgramUniform3iEXT, GLPROGRAMUNIFORM3IEXT, (GLuint program , GLint location , GLint v0 , GLint v1 , GLint v2 ), (program, location, v0, v1, v2)) \
	FUNC(void , glProgramUniform4iEXT, GLPROGRAMUNIFORM4IEXT, (GLuint program , GLint location , GLint v0 , GLint v1 , GLint v2 , GLint v3 ), (program, location, v0, v1, v2, v3)) \
	FUNC(void , glProgramUniform1fvEXT, GLPROGRAMUNIFORM1FVEXT, (GLuint program , GLint location , GLsizei count , const GLfloat * value ), (program, location, count, value)) \
	FUNC(void , glProgramUniform2fvEXT, GLPROGRAMUNIFORM2FVEXT, (GLuint program , GLint location , GLsizei count , const GLfloat * value ), (program, location, count, value)) \
	FUNC(void , glProgramUniform3fvEXT, GLPROGRAMUNIFORM3FVEXT, (GLuint program , GLint location , GLsizei count , const GLfloat * value ), (program, location, count, value)) \
	FUNC(void , glProgramUniform4fvEXT, GLPROGRAMUNIFORM4FVEXT, (GLuint program , GLint location , GLsizei count , const GLfloat * value ), (program, location, count, value)) \
	FUNC(void , glProgramUniform1ivEXT, GLPROGRAMUNIFORM1IVEXT, (GLuint program , GLint location , GLsizei count , const GLint * value ), (program, location, count, value)) \
	FUNC(void , glProgramUniform2ivEXT, GLPROGRAMUNIFORM2IVEXT, (GLuint program , GLint location , GLsizei count , const GLint * value ), (program, location, count, value)) \
	FUNC(void , glProgramUniform3ivEXT, GLPROGRAMUNIFORM3IVEXT, (GLuint program , GLint location , GLsizei count , const GLint * value ), (program, location, count, value)) \
	FUNC(void , glProgramUniform4ivEXT, GLPROGRAMUNIFORM4IVEXT, (GLuint program , GLint location , GLsizei count , const GLint * value ), (program, location, count, value)) \
	FUNC(void , glProgramUniformMatrix2fvEXT, GLPROGRAMUNIFORMMATRIX2FVEXT, (GLuint program , GLint location , GLsizei count , GLboolean transpose , const GLfloat * value ), (program, location, count, transpose, value)) \
	FUNC(void , glProgramUniformMatrix3fvEXT, GLPROGRAMUNIFORMMATRIX3FVEXT, (GLuint program , GLint location , GLsizei count , GLboolean transpose , const GLfloat * value ), (program, location, count, transpose, value)) \
	FUNC(void , glProgramUniformMatrix4fvEXT, GLPROGRAMUNIFORMMATRIX4FVEXT, (GLuint program , GLint location , GLsizei count , GLboolean transpose , const GLfloat * value ), (program, location, count, transpose, value)) \
	FUNC(void , glProgramUniformMatrix2x3fvEXT, GLPROGRAMUNIFORMMATRIX2X3FVEXT, (GLuint program , GLint location , GLsizei count , GLboolean transpose , const GLfloat * value ), (program, location, count, transpose, value)) \
	FUNC(void , glProgramUniformMatrix3x2fvEXT, GLPROGRAMUNIFORMMATRIX3X2FVEXT, (GLuint program , GLint location , GLsizei count , GLboolean transpose , const GLfloat * value ), (program, location, count, transpose, value)) \
	FUNC(void , glProgramUniformMatrix2x4fvEXT, GLPROGRAMUNIFORMMATRIX2X4FVEXT, (GLuint program , GLint location , GLsizei count , GLboolean transpose , const GLfloat * value ), (program, location, count, transpose, value)) \
	FUNC(void , glProgramUniformMatrix4x2fvEXT, GLPROGRAMUNIFORMMATRIX4X2FVEXT, (GLuint program , GLint location , GLsizei count , GLboolean transpose , const GLfloat * value ), (program, location, count, transpose, value)) \
	FUNC(void , glProgramUniformMatrix3x4fvEXT, GLPROGRAMUNIFORMMATRIX3X4FVEXT, (GLuint program , GLint location , GLsizei count , GLboolean transpose , const GLfloat * value ), (program, location, count, transpose, value)) \
	FUNC(void , glProgramUniformMatrix4x3fvEXT, GLPROGRAMUNIFORMMATRIX4X3FVEXT, (GLuint program , GLint location , GLsizei count , GLboolean transpose , const GLfloat * value ), (program, location, count, transpose, value)) \
	FUNC(void , glProgramUniform1uiEXT, GLPROGRAMUNIFORM1UIEXT, (GLuint program , GLint location , GLuint v0 ), (program, location, v0)) \
	FUNC(void , glProgramUniform2uiEXT, GLPROGRAMUNIFORM2UIEXT, (GLuint program , GLint location , GLuint v0 , GLuint v1 ), (program, location, v0, v1)) \
	FUNC(void , glProgramUniform3uiEXT, GLPROGRAMUNIFORM3UIEXT, (GLuint program , GLint location , GLuint v0 , GLuint v1 , GLuint v2 ), (program, location, v0, v1, v2)) \
	FUNC(void , glProgramUniform4uiEXT, GLPROGRAMUNIFORM4UIEXT, (GLuint program , GLint location , GLuint v0 , GLuint v1 , GLuint v2 , GLuint v3 ), (program, location, v0, v1, v2, v3)) \
	FUNC(void , glProgramUniform1uivEXT, GLPROGRAMUNIFORM1UIVEXT, (GLuint program , GLint location , GLsizei count , const GLuint * value ), (program, location, count, value)) \
	FUNC(void , glProgramUniform2uivEXT, GLPROGRAMUNIFORM2UIVEXT, (GLuint program , GLint location , GLsizei count , const GLuint * value ), (program, location, count, value)) \
	FUNC(void , glProgramUniform3uivEXT, GLPROGRAMUNIFORM3UIVEXT, (GLuint program , GLint location , GLsizei count , const GLuint * value ), (program, location, count, value)) \
	FUNC(void , glProgramUniform4uivEXT, GLPROGRAMUNIFORM4UIVEXT, (GLuint program , GLint location , GLsizei count , const GLuint * value ), (program, location, count, value)) \
	FUNC(void , glNamedBufferDataEXT, GLNAMEDBUFFERDATAEXT, (GLuint buffer , GLsizeiptr size , const GLvoid * data , GLenum usage ), (buffer, size, data, usage)) \
	FUNC(void , glNamedBufferSubDataEXT, GLNAMEDBUFFERSUBDATAEXT, (GLuint buffer , GLintptr offset , GLsizeiptr size , const GLvoid * data ), (buffer, offset, size, data)) \
	FUNC(GLvoid * , glMapNamedBufferEXT, GLMAPNAMEDBUFFEREXT, (GLuint buffer , GLenum access ), (buffer, access)) \
	FUNC(GLboolean , glUnmapNamedBufferEXT, GLUNMAPNAMEDBUFFEREXT, (GLuint buffer ), (buffer)) \
	FUNC(GLvoid * , glMapNamedBufferRangeEXT, GLMAPNAMEDBUFFERRANGEEXT, (GLuint buffer , GLintptr offset , GLsizeiptr length , GLbitfield access ), (buffer, offset, length, access)) \
	FUNC(void , glFlushMappedNamedBufferRangeEXT, GLFLUSHMAPPEDNAMEDBUFFERRANGEEXT, (GLuint buffer , GLintptr offset , GLsizeiptr length ), (buffer, offset, length)) \
	FUNC(void , glNamedCopyBufferSubDataEXT, GLNAMEDCOPYBUFFERSUBDATAEXT, (GLuint readBuffer , GLuint writeBuffer , GLintptr readOffset , GLintptr writeOffset , GLsizeiptr size ), (readBuffer, writeBuffer, readOffset, writeOffset, size)) \
	FUNC(void , glGetNamedBufferParameterivEXT, GLGETNAMEDBUFFERPARAMETERIVEXT, (GLuint buffer , GLenum pname , GLint * params ), (buffer, pname, params)) \
	FUNC(void , glGetNamedBufferPointervEXT, GLGETNAMEDBUFFERPOINTERVEXT, (GLuint buffer , GLenum pname , GLvoid * * params ), (buffer, pname, params)) \
	FUNC(void , glGetNamedBufferSubDataEXT, GLGETNAMEDBUFFERSUBDATAEXT, (GLuint buffer , GLintptr offset , GLsizeiptr size , GLvoid * data ), (buffer, offset, size, data)) \
	FUNC(void , glTextureBufferEXT, GLTEXTUREBUFFEREXT, (GLuint texture , GLenum target , GLenum internalformat , GLuint buffer ), (texture, target, internalformat, buffer)) \
	FUNC(void , glMultiTexBufferEXT, GLMULTITEXBUFFEREXT, (GLenum texunit , GLenum target , GLenum internalformat , GLuint buffer ), (texunit, target, internalformat, buffer)) \
	FUNC(void , glNamedRenderbufferStorageEXT, GLNAMEDRENDERBUFFERSTORAGEEXT, (GLuint renderbuffer , GLenum internalformat , GLsizei width , GLsizei height ), (renderbuffer, internalformat, width, height)) \
	FUNC(void , glGetNamedRenderbufferParameterivEXT, GLGETNAMEDRENDERBUFFERPARAMETERIVEXT, (GLuint renderbuffer , GLenum pname , GLint * params ), (renderbuffer, pname, params)) \
	FUNC(GLenum , glCheckNamedFramebufferStatusEXT, GLCHECKNAMEDFRAMEBUFFERSTATUSEXT, (GLuint framebuffer , GLenum target ), (framebuffer, target)) \
	FUNC(void , glNamedFramebufferTexture1DEXT, GLNAMEDFRAMEBUFFERTEXTURE1DEXT, (GLuint framebuffer , GLenum attachment , GLenum textarget , GLuint texture , GLint level ), (framebuffer, attachment, textarget, texture, level)) \
	FUNC(void , glNamedFramebufferTexture2DEXT, GLNAMEDFRAMEBUFFERTEXTURE2DEXT, (GLuint framebuffer , GLenum attachment , GLenum textarget , GLuint texture , GLint level ), (framebuffer, attachment, textarget, texture, level)) \
	FUNC(void , glNamedFramebufferTexture3DEXT, GLNAMEDFRAMEBUFFERTEXTURE3DEXT, (GLuint framebuffer , GLenum attachment , GLenum textarget , GLuint texture , GLint level , GLint zoffset ), (framebuffer, attachment, textarget, texture, level, zoffset)) \
	FUNC(void , glNamedFramebufferRenderbufferEXT, GLNAMEDFRAMEBUFFERRENDERBUFFEREXT, (GLuint framebuffer , GLenum attachment , GLenum renderbuffertarget , GLuint renderbuffer ), (framebuffer, attachment, renderbuffertarget, renderbuffer)) \
	FUNC(void , glGetNamedFramebufferAttachmentParameterivEXT, GLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXT, (GLuint framebuffer , GLenum attachment , GLenum pname , GLint * params ), (framebuffer, attachment, pname, params)) \
	FUNC(void , glGenerateTextureMipmapEXT, GLGENERATETEXTUREMIPMAPEXT, (GLuint texture , GLenum target ), (texture, target)) \
	FUNC(void , glGenerateMultiTexMipmapEXT, GLGENERATEMULTITEXMIPMAPEXT, (GLenum texunit , GLenum target ), (texunit, target)) \
	FUNC(void , glFramebufferDrawBufferEXT, GLFRAMEBUFFERDRAWBUFFEREXT, (GLuint framebuffer , GLenum mode ), (framebuffer, mode)) \
	FUNC(void , glFramebufferDrawBuffersEXT, GLFRAMEBUFFERDRAWBUFFERSEXT, (GLuint framebuffer , GLsizei n , const GLenum * bufs ), (framebuffer, n, bufs)) \
	FUNC(void , glFramebufferReadBufferEXT, GLFRAMEBUFFERREADBUFFEREXT, (GLuint framebuffer , GLenum mode ), (framebuffer, mode)) \
	FUNC(void , glGetFramebufferParameterivEXT, GLGETFRAMEBUFFERPARAMETERIVEXT, (GLuint framebuffer , GLenum pname , GLint * params ), (framebuffer, pname, params)) \
	FUNC(void , glNamedRenderbufferStorageMultisampleEXT, GLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXT, (GLuint renderbuffer , GLsizei samples , GLenum internalformat , GLsizei width , GLsizei height ), (renderbuffer, samples, internalformat, width, height)) \
	FUNC(void , glNamedRenderbufferStorageMultisampleCoverageEXT, GLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXT, (GLuint renderbuffer , GLsizei coverageSamples , GLsizei colorSamples , GLenum internalformat , GLsizei width , GLsizei height ), (renderbuffer, coverageSamples, colorSamples, internalformat, width, height)) \
	FUNC(void , glNamedFramebufferTextureEXT, GLNAMEDFRAMEBUFFERTEXTUREEXT, (GLuint framebuffer , GLenum attachment , GLuint texture , GLint level ), (framebuffer, attachment, texture, level)) \
	FUNC(void , glNamedFramebufferTextureLayerEXT, GLNAMEDFRAMEBUFFERTEXTURELAYEREXT, (GLuint framebuffer , GLenum attachment , GLuint texture , GLint level , GLint layer ), (framebuffer, attachment, texture, level, layer)) \
	FUNC(void , glNamedFramebufferTextureFaceEXT, GLNAMEDFRAMEBUFFERTEXTUREFACEEXT, (GLuint framebuffer , GLenum attachment , GLuint texture , GLint level , GLenum face ), (framebuffer, attachment, texture, level, face)) \
	FUNC(void , glTextureRenderbufferEXT, GLTEXTURERENDERBUFFEREXT, (GLuint texture , GLenum target , GLuint renderbuffer ), (texture, target, renderbuffer)) \
	FUNC(void , glMultiTexRenderbufferEXT, GLMULTITEXRENDERBUFFEREXT, (GLenum texunit , GLenum target , GLuint renderbuffer ), (texunit, target, renderbuffer)) \
	FUNC(void , glProgramUniform1dEXT, GLPROGRAMUNIFORM1DEXT, (GLuint program , GLint location , GLdouble x ), (program, location, x)) \
	FUNC(void , glProgramUniform2dEXT, GLPROGRAMUNIFORM2DEXT, (GLuint program , GLint location , GLdouble x , GLdouble y ), (program, location, x, y)) \
	FUNC(void , glProgramUniform3dEXT, GLPROGRAMUNIFORM3DEXT, (GLuint program , GLint location , GLdouble x , GLdouble y , GLdouble z ), (program, location, x, y, z)) \
	FUNC(void , glProgramUniform4dEXT, GLPROGRAMUNIFORM4DEXT, (GLuint program , GLint location , GLdouble x , GLdouble y , GLdouble z , GLdouble w ), (program, location, x, y, z, w)) \
	FUNC(void , glProgramUniform1dvEXT, GLPROGRAMUNIFORM1DVEXT, (GLuint program , GLint location , GLsizei count , const GLdouble * value ), (program, location, count, value)) \
	FUNC(void , glProgramUniform2dvEXT, GLPROGRAMUNIFORM2DVEXT, (GLuint program , GLint location , GLsizei count , const GLdouble * value ), (program, location, count, value)) \
	FUNC(void , glProgramUniform3dvEXT, GLPROGRAMUNIFORM3DVEXT, (GLuint program , GLint location , GLsizei count , const GLdouble * value ), (program, location, count, value)) \
	FUNC(void , glProgramUniform4dvEXT, GLPROGRAMUNIFORM4DVEXT, (GLuint program , GLint location , GLsizei count , const GLdouble * value ), (program, location, count, value)) \
	FUNC(void , glProgramUniformMatrix2dvEXT, GLPROGRAMUNIFORMMATRIX2DVEXT, (GLuint program , GLint location , GLsizei count , GLboolean transpose , const GLdouble * value ), (program, location, count, transpose, value)) \
	FUNC(void , glProgramUniformMatrix3dvEXT, GLPROGRAMUNIFORMMATRIX3DVEXT, (GLuint program , GLint location , GLsizei count , GLboolean transpose , const GLdouble * value ), (program, location, count, transpose, value)) \
	FUNC(void , glProgramUniformMatrix4dvEXT, GLPROGRAMUNIFORMMATRIX4DVEXT, (GLuint program , GLint location , GLsizei count , GLboolean transpose , const GLdouble * value ), (program, location, count, transpose, value)) \
	FUNC(void , glProgramUniformMatrix2x3dvEXT, GLPROGRAMUNIFORMMATRIX2X3DVEXT, (GLuint program , GLint location , GLsizei count , GLboolean transpose , const GLdouble * value ), (program, location, count, transpose, value)) \
	FUNC(void , glProgramUniformMatrix2x4dvEXT, GLPROGRAMUNIFORMMATRIX2X4DVEXT, (GLuint program , GLint location , GLsizei count , GLboolean transpose , const GLdouble * value ), (program, location, count, transpose, value)) \
	FUNC(void , glProgramUniformMatrix3x2dvEXT, GLPROGRAMUNIFORMMATRIX3X2DVEXT, (GLuint program , GLint location , GLsizei count , GLboolean transpose , const GLdouble * value ), (program, location, count, transpose, value)) \
	FUNC(void , glProgramUniformMatrix3x4dvEXT, GLPROGRAMUNIFORMMATRIX3X4DVEXT, (GLuint program , GLint location , GLsizei count , GLboolean transpose , const GLdouble * value ), (program, location, count, transpose, value)) \
	FUNC(void , glProgramUniformMatrix4x2dvEXT, GLPROGRAMUNIFORMMATRIX4X2DVEXT, (GLuint program , GLint location , GLsizei count , GLboolean transpose , const GLdouble * value ), (program, location, count, transpose, value)) \
	FUNC(void , glProgramUniformMatrix4x3dvEXT, GLPROGRAMUNIFORMMATRIX4X3DVEXT, (GLuint program , GLint location , GLsizei count , GLboolean transpose , const GLdouble * value ), (program, location, count, transpose, value)) \
	END()
#else
#define EXTENSION_GL_EXT_direct_state_access(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_draw_buffers2
#define GL_EXT_draw_buffers2 1
#define EXTENSION_GL_EXT_draw_buffers2(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_draw_buffers2) \
	FUNC(void , glColorMaskIndexedEXT, GLCOLORMASKINDEXEDEXT, (GLuint index , GLboolean r , GLboolean g , GLboolean b , GLboolean a ), (index, r, g, b, a)) \
	FUNC(void , glGetBooleanIndexedvEXT, GLGETBOOLEANINDEXEDVEXT, (GLenum target , GLuint index , GLboolean * data ), (target, index, data)) \
	FUNC(void , glGetIntegerIndexedvEXT, GLGETINTEGERINDEXEDVEXT, (GLenum target , GLuint index , GLint * data ), (target, index, data)) \
	FUNC(void , glEnableIndexedEXT, GLENABLEINDEXEDEXT, (GLenum target , GLuint index ), (target, index)) \
	FUNC(void , glDisableIndexedEXT, GLDISABLEINDEXEDEXT, (GLenum target , GLuint index ), (target, index)) \
	FUNC(GLboolean , glIsEnabledIndexedEXT, GLISENABLEDINDEXEDEXT, (GLenum target , GLuint index ), (target, index)) \
	END()
#else
#define EXTENSION_GL_EXT_draw_buffers2(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_draw_instanced
#define GL_EXT_draw_instanced 1
#define EXTENSION_GL_EXT_draw_instanced(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_draw_instanced) \
	FUNC(void , glDrawArraysInstancedEXT, GLDRAWARRAYSINSTANCEDEXT, (GLenum mode , GLint start , GLsizei count , GLsizei primcount ), (mode, start, count, primcount)) \
	FUNC(void , glDrawElementsInstancedEXT, GLDRAWELEMENTSINSTANCEDEXT, (GLenum mode , GLsizei count , GLenum type , const GLvoid * indices , GLsizei primcount ), (mode, count, type, indices, primcount)) \
	END()
#else
#define EXTENSION_GL_EXT_draw_instanced(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_draw_range_elements
#define GL_EXT_draw_range_elements 1
#define EXTENSION_GL_EXT_draw_range_elements(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_draw_range_elements) \
	CONST(int, GL_MAX_ELEMENTS_VERTICES_EXT, 0x80E8) \
	CONST(int, GL_MAX_ELEMENTS_INDICES_EXT, 0x80E9) \
	FUNC(void , glDrawRangeElementsEXT, GLDRAWRANGEELEMENTSEXT, (GLenum mode , GLuint start , GLuint end , GLsizei count , GLenum type , const GLvoid * indices ), (mode, start, end, count, type, indices)) \
	END()
#else
#define EXTENSION_GL_EXT_draw_range_elements(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_fog_coord
#define GL_EXT_fog_coord 1
#define EXTENSION_GL_EXT_fog_coord(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_fog_coord) \
	CONST(int, GL_FOG_COORDINATE_SOURCE_EXT, 0x8450) \
	CONST(int, GL_FOG_COORDINATE_EXT, 0x8451) \
	CONST(int, GL_FRAGMENT_DEPTH_EXT, 0x8452) \
	CONST(int, GL_CURRENT_FOG_COORDINATE_EXT, 0x8453) \
	CONST(int, GL_FOG_COORDINATE_ARRAY_TYPE_EXT, 0x8454) \
	CONST(int, GL_FOG_COORDINATE_ARRAY_STRIDE_EXT, 0x8455) \
	CONST(int, GL_FOG_COORDINATE_ARRAY_POINTER_EXT, 0x8456) \
	CONST(int, GL_FOG_COORDINATE_ARRAY_EXT, 0x8457) \
	FUNC(void , glFogCoordfEXT, GLFOGCOORDFEXT, (GLfloat coord ), (coord)) \
	FUNC(void , glFogCoordfvEXT, GLFOGCOORDFVEXT, (const GLfloat * coord ), (coord)) \
	FUNC(void , glFogCoorddEXT, GLFOGCOORDDEXT, (GLdouble coord ), (coord)) \
	FUNC(void , glFogCoorddvEXT, GLFOGCOORDDVEXT, (const GLdouble * coord ), (coord)) \
	FUNC(void , glFogCoordPointerEXT, GLFOGCOORDPOINTEREXT, (GLenum type , GLsizei stride , const GLvoid * pointer ), (type, stride, pointer)) \
	END()
#else
#define EXTENSION_GL_EXT_fog_coord(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_framebuffer_blit
#define GL_EXT_framebuffer_blit 1
#define EXTENSION_GL_EXT_framebuffer_blit(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_framebuffer_blit) \
	CONST(int, GL_READ_FRAMEBUFFER_EXT, 0x8CA8) \
	CONST(int, GL_DRAW_FRAMEBUFFER_EXT, 0x8CA9) \
	CONST(int, GL_DRAW_FRAMEBUFFER_BINDING_EXT, 0x8CA6) \
	CONST(int, GL_READ_FRAMEBUFFER_BINDING_EXT, 0x8CAA) \
	FUNC(void , glBlitFramebufferEXT, GLBLITFRAMEBUFFEREXT, (GLint srcX0 , GLint srcY0 , GLint srcX1 , GLint srcY1 , GLint dstX0 , GLint dstY0 , GLint dstX1 , GLint dstY1 , GLbitfield mask , GLenum filter ), (srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter)) \
	END()
#else
#define EXTENSION_GL_EXT_framebuffer_blit(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_framebuffer_multisample
#define GL_EXT_framebuffer_multisample 1
#define EXTENSION_GL_EXT_framebuffer_multisample(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_framebuffer_multisample) \
	CONST(int, GL_RENDERBUFFER_SAMPLES_EXT, 0x8CAB) \
	CONST(int, GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT, 0x8D56) \
	CONST(int, GL_MAX_SAMPLES_EXT, 0x8D57) \
	FUNC(void , glRenderbufferStorageMultisampleEXT, GLRENDERBUFFERSTORAGEMULTISAMPLEEXT, (GLenum target , GLsizei samples , GLenum internalformat , GLsizei width , GLsizei height ), (target, samples, internalformat, width, height)) \
	END()
#else
#define EXTENSION_GL_EXT_framebuffer_multisample(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_framebuffer_object
#define GL_EXT_framebuffer_object 1
#define EXTENSION_GL_EXT_framebuffer_object(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_framebuffer_object) \
	CONST(int, GL_INVALID_FRAMEBUFFER_OPERATION_EXT, 0x0506) \
	CONST(int, GL_MAX_RENDERBUFFER_SIZE_EXT, 0x84E8) \
	CONST(int, GL_FRAMEBUFFER_BINDING_EXT, 0x8CA6) \
	CONST(int, GL_RENDERBUFFER_BINDING_EXT, 0x8CA7) \
	CONST(int, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT, 0x8CD0) \
	CONST(int, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT, 0x8CD1) \
	CONST(int, GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT, 0x8CD2) \
	CONST(int, GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT, 0x8CD3) \
	CONST(int, GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT, 0x8CD4) \
	CONST(int, GL_FRAMEBUFFER_COMPLETE_EXT, 0x8CD5) \
	CONST(int, GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT, 0x8CD6) \
	CONST(int, GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT, 0x8CD7) \
	CONST(int, GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT, 0x8CD9) \
	CONST(int, GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT, 0x8CDA) \
	CONST(int, GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT, 0x8CDB) \
	CONST(int, GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT, 0x8CDC) \
	CONST(int, GL_FRAMEBUFFER_UNSUPPORTED_EXT, 0x8CDD) \
	CONST(int, GL_MAX_COLOR_ATTACHMENTS_EXT, 0x8CDF) \
	CONST(int, GL_COLOR_ATTACHMENT0_EXT, 0x8CE0) \
	CONST(int, GL_COLOR_ATTACHMENT1_EXT, 0x8CE1) \
	CONST(int, GL_COLOR_ATTACHMENT2_EXT, 0x8CE2) \
	CONST(int, GL_COLOR_ATTACHMENT3_EXT, 0x8CE3) \
	CONST(int, GL_COLOR_ATTACHMENT4_EXT, 0x8CE4) \
	CONST(int, GL_COLOR_ATTACHMENT5_EXT, 0x8CE5) \
	CONST(int, GL_COLOR_ATTACHMENT6_EXT, 0x8CE6) \
	CONST(int, GL_COLOR_ATTACHMENT7_EXT, 0x8CE7) \
	CONST(int, GL_COLOR_ATTACHMENT8_EXT, 0x8CE8) \
	CONST(int, GL_COLOR_ATTACHMENT9_EXT, 0x8CE9) \
	CONST(int, GL_COLOR_ATTACHMENT10_EXT, 0x8CEA) \
	CONST(int, GL_COLOR_ATTACHMENT11_EXT, 0x8CEB) \
	CONST(int, GL_COLOR_ATTACHMENT12_EXT, 0x8CEC) \
	CONST(int, GL_COLOR_ATTACHMENT13_EXT, 0x8CED) \
	CONST(int, GL_COLOR_ATTACHMENT14_EXT, 0x8CEE) \
	CONST(int, GL_COLOR_ATTACHMENT15_EXT, 0x8CEF) \
	CONST(int, GL_DEPTH_ATTACHMENT_EXT, 0x8D00) \
	CONST(int, GL_STENCIL_ATTACHMENT_EXT, 0x8D20) \
	CONST(int, GL_FRAMEBUFFER_EXT, 0x8D40) \
	CONST(int, GL_RENDERBUFFER_EXT, 0x8D41) \
	CONST(int, GL_RENDERBUFFER_WIDTH_EXT, 0x8D42) \
	CONST(int, GL_RENDERBUFFER_HEIGHT_EXT, 0x8D43) \
	CONST(int, GL_RENDERBUFFER_INTERNAL_FORMAT_EXT, 0x8D44) \
	CONST(int, GL_STENCIL_INDEX1_EXT, 0x8D46) \
	CONST(int, GL_STENCIL_INDEX4_EXT, 0x8D47) \
	CONST(int, GL_STENCIL_INDEX8_EXT, 0x8D48) \
	CONST(int, GL_STENCIL_INDEX16_EXT, 0x8D49) \
	CONST(int, GL_RENDERBUFFER_RED_SIZE_EXT, 0x8D50) \
	CONST(int, GL_RENDERBUFFER_GREEN_SIZE_EXT, 0x8D51) \
	CONST(int, GL_RENDERBUFFER_BLUE_SIZE_EXT, 0x8D52) \
	CONST(int, GL_RENDERBUFFER_ALPHA_SIZE_EXT, 0x8D53) \
	CONST(int, GL_RENDERBUFFER_DEPTH_SIZE_EXT, 0x8D54) \
	CONST(int, GL_RENDERBUFFER_STENCIL_SIZE_EXT, 0x8D55) \
	FUNC(GLboolean , glIsRenderbufferEXT, GLISRENDERBUFFEREXT, (GLuint renderbuffer ), (renderbuffer)) \
	FUNC(void , glBindRenderbufferEXT, GLBINDRENDERBUFFEREXT, (GLenum target , GLuint renderbuffer ), (target, renderbuffer)) \
	FUNC(void , glDeleteRenderbuffersEXT, GLDELETERENDERBUFFERSEXT, (GLsizei n , const GLuint * renderbuffers ), (n, renderbuffers)) \
	FUNC(void , glGenRenderbuffersEXT, GLGENRENDERBUFFERSEXT, (GLsizei n , GLuint * renderbuffers ), (n, renderbuffers)) \
	FUNC(void , glRenderbufferStorageEXT, GLRENDERBUFFERSTORAGEEXT, (GLenum target , GLenum internalformat , GLsizei width , GLsizei height ), (target, internalformat, width, height)) \
	FUNC(void , glGetRenderbufferParameterivEXT, GLGETRENDERBUFFERPARAMETERIVEXT, (GLenum target , GLenum pname , GLint * params ), (target, pname, params)) \
	FUNC(GLboolean , glIsFramebufferEXT, GLISFRAMEBUFFEREXT, (GLuint framebuffer ), (framebuffer)) \
	FUNC(void , glBindFramebufferEXT, GLBINDFRAMEBUFFEREXT, (GLenum target , GLuint framebuffer ), (target, framebuffer)) \
	FUNC(void , glDeleteFramebuffersEXT, GLDELETEFRAMEBUFFERSEXT, (GLsizei n , const GLuint * framebuffers ), (n, framebuffers)) \
	FUNC(void , glGenFramebuffersEXT, GLGENFRAMEBUFFERSEXT, (GLsizei n , GLuint * framebuffers ), (n, framebuffers)) \
	FUNC(GLenum , glCheckFramebufferStatusEXT, GLCHECKFRAMEBUFFERSTATUSEXT, (GLenum target ), (target)) \
	FUNC(void , glFramebufferTexture1DEXT, GLFRAMEBUFFERTEXTURE1DEXT, (GLenum target , GLenum attachment , GLenum textarget , GLuint texture , GLint level ), (target, attachment, textarget, texture, level)) \
	FUNC(void , glFramebufferTexture2DEXT, GLFRAMEBUFFERTEXTURE2DEXT, (GLenum target , GLenum attachment , GLenum textarget , GLuint texture , GLint level ), (target, attachment, textarget, texture, level)) \
	FUNC(void , glFramebufferTexture3DEXT, GLFRAMEBUFFERTEXTURE3DEXT, (GLenum target , GLenum attachment , GLenum textarget , GLuint texture , GLint level , GLint zoffset ), (target, attachment, textarget, texture, level, zoffset)) \
	FUNC(void , glFramebufferRenderbufferEXT, GLFRAMEBUFFERRENDERBUFFEREXT, (GLenum target , GLenum attachment , GLenum renderbuffertarget , GLuint renderbuffer ), (target, attachment, renderbuffertarget, renderbuffer)) \
	FUNC(void , glGetFramebufferAttachmentParameterivEXT, GLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXT, (GLenum target , GLenum attachment , GLenum pname , GLint * params ), (target, attachment, pname, params)) \
	FUNC(void , glGenerateMipmapEXT, GLGENERATEMIPMAPEXT, (GLenum target ), (target)) \
	END()
#else
#define EXTENSION_GL_EXT_framebuffer_object(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_framebuffer_sRGB
#define GL_EXT_framebuffer_sRGB 1
#define EXTENSION_GL_EXT_framebuffer_sRGB(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_framebuffer_sRGB) \
	CONST(int, GL_FRAMEBUFFER_SRGB_EXT, 0x8DB9) \
	CONST(int, GL_FRAMEBUFFER_SRGB_CAPABLE_EXT, 0x8DBA) \
	END()
#else
#define EXTENSION_GL_EXT_framebuffer_sRGB(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_geometry_shader4
#define GL_EXT_geometry_shader4 1
#define EXTENSION_GL_EXT_geometry_shader4(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_geometry_shader4) \
	CONST(int, GL_GEOMETRY_SHADER_EXT, 0x8DD9) \
	CONST(int, GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT, 0x8DDD) \
	CONST(int, GL_MAX_VERTEX_VARYING_COMPONENTS_EXT, 0x8DDE) \
	CONST(int, GL_MAX_VARYING_COMPONENTS_EXT, 0x8B4B) \
	CONST(int, GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT, 0x8DDF) \
	CONST(int, GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT, 0x8DE0) \
	CONST(int, GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT, 0x8DE1) \
	FUNC(void , glProgramParameteriEXT, GLPROGRAMPARAMETERIEXT, (GLuint program , GLenum pname , GLint value ), (program, pname, value)) \
	END()
#else
#define EXTENSION_GL_EXT_geometry_shader4(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_gpu_program_parameters
#define GL_EXT_gpu_program_parameters 1
#define EXTENSION_GL_EXT_gpu_program_parameters(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_gpu_program_parameters) \
	FUNC(void , glProgramEnvParameters4fvEXT, GLPROGRAMENVPARAMETERS4FVEXT, (GLenum target , GLuint index , GLsizei count , const GLfloat * params ), (target, index, count, params)) \
	FUNC(void , glProgramLocalParameters4fvEXT, GLPROGRAMLOCALPARAMETERS4FVEXT, (GLenum target , GLuint index , GLsizei count , const GLfloat * params ), (target, index, count, params)) \
	END()
#else
#define EXTENSION_GL_EXT_gpu_program_parameters(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_gpu_shader4
#define GL_EXT_gpu_shader4 1
#define EXTENSION_GL_EXT_gpu_shader4(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_gpu_shader4) \
	CONST(int, GL_SAMPLER_1D_ARRAY_EXT, 0x8DC0) \
	CONST(int, GL_SAMPLER_2D_ARRAY_EXT, 0x8DC1) \
	CONST(int, GL_SAMPLER_BUFFER_EXT, 0x8DC2) \
	CONST(int, GL_SAMPLER_1D_ARRAY_SHADOW_EXT, 0x8DC3) \
	CONST(int, GL_SAMPLER_2D_ARRAY_SHADOW_EXT, 0x8DC4) \
	CONST(int, GL_SAMPLER_CUBE_SHADOW_EXT, 0x8DC5) \
	CONST(int, GL_UNSIGNED_INT_VEC2_EXT, 0x8DC6) \
	CONST(int, GL_UNSIGNED_INT_VEC3_EXT, 0x8DC7) \
	CONST(int, GL_UNSIGNED_INT_VEC4_EXT, 0x8DC8) \
	CONST(int, GL_INT_SAMPLER_1D_EXT, 0x8DC9) \
	CONST(int, GL_INT_SAMPLER_2D_EXT, 0x8DCA) \
	CONST(int, GL_INT_SAMPLER_3D_EXT, 0x8DCB) \
	CONST(int, GL_INT_SAMPLER_CUBE_EXT, 0x8DCC) \
	CONST(int, GL_INT_SAMPLER_2D_RECT_EXT, 0x8DCD) \
	CONST(int, GL_INT_SAMPLER_1D_ARRAY_EXT, 0x8DCE) \
	CONST(int, GL_INT_SAMPLER_2D_ARRAY_EXT, 0x8DCF) \
	CONST(int, GL_INT_SAMPLER_BUFFER_EXT, 0x8DD0) \
	CONST(int, GL_UNSIGNED_INT_SAMPLER_1D_EXT, 0x8DD1) \
	CONST(int, GL_UNSIGNED_INT_SAMPLER_2D_EXT, 0x8DD2) \
	CONST(int, GL_UNSIGNED_INT_SAMPLER_3D_EXT, 0x8DD3) \
	CONST(int, GL_UNSIGNED_INT_SAMPLER_CUBE_EXT, 0x8DD4) \
	CONST(int, GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT, 0x8DD5) \
	CONST(int, GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT, 0x8DD6) \
	CONST(int, GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT, 0x8DD7) \
	CONST(int, GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT, 0x8DD8) \
	FUNC(void , glGetUniformuivEXT, GLGETUNIFORMUIVEXT, (GLuint program , GLint location , GLuint * params ), (program, location, params)) \
	FUNC(void , glBindFragDataLocationEXT, GLBINDFRAGDATALOCATIONEXT, (GLuint program , GLuint color , const GLchar * name ), (program, color, name)) \
	FUNC(GLint , glGetFragDataLocationEXT, GLGETFRAGDATALOCATIONEXT, (GLuint program , const GLchar * name ), (program, name)) \
	FUNC(void , glUniform1uiEXT, GLUNIFORM1UIEXT, (GLint location , GLuint v0 ), (location, v0)) \
	FUNC(void , glUniform2uiEXT, GLUNIFORM2UIEXT, (GLint location , GLuint v0 , GLuint v1 ), (location, v0, v1)) \
	FUNC(void , glUniform3uiEXT, GLUNIFORM3UIEXT, (GLint location , GLuint v0 , GLuint v1 , GLuint v2 ), (location, v0, v1, v2)) \
	FUNC(void , glUniform4uiEXT, GLUNIFORM4UIEXT, (GLint location , GLuint v0 , GLuint v1 , GLuint v2 , GLuint v3 ), (location, v0, v1, v2, v3)) \
	FUNC(void , glUniform1uivEXT, GLUNIFORM1UIVEXT, (GLint location , GLsizei count , const GLuint * value ), (location, count, value)) \
	FUNC(void , glUniform2uivEXT, GLUNIFORM2UIVEXT, (GLint location , GLsizei count , const GLuint * value ), (location, count, value)) \
	FUNC(void , glUniform3uivEXT, GLUNIFORM3UIVEXT, (GLint location , GLsizei count , const GLuint * value ), (location, count, value)) \
	FUNC(void , glUniform4uivEXT, GLUNIFORM4UIVEXT, (GLint location , GLsizei count , const GLuint * value ), (location, count, value)) \
	END()
#else
#define EXTENSION_GL_EXT_gpu_shader4(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_histogram
#define GL_EXT_histogram 1
#define EXTENSION_GL_EXT_histogram(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_histogram) \
	CONST(int, GL_HISTOGRAM_EXT, 0x8024) \
	CONST(int, GL_PROXY_HISTOGRAM_EXT, 0x8025) \
	CONST(int, GL_HISTOGRAM_WIDTH_EXT, 0x8026) \
	CONST(int, GL_HISTOGRAM_FORMAT_EXT, 0x8027) \
	CONST(int, GL_HISTOGRAM_RED_SIZE_EXT, 0x8028) \
	CONST(int, GL_HISTOGRAM_GREEN_SIZE_EXT, 0x8029) \
	CONST(int, GL_HISTOGRAM_BLUE_SIZE_EXT, 0x802A) \
	CONST(int, GL_HISTOGRAM_ALPHA_SIZE_EXT, 0x802B) \
	CONST(int, GL_HISTOGRAM_LUMINANCE_SIZE_EXT, 0x802C) \
	CONST(int, GL_HISTOGRAM_SINK_EXT, 0x802D) \
	CONST(int, GL_MINMAX_EXT, 0x802E) \
	CONST(int, GL_MINMAX_FORMAT_EXT, 0x802F) \
	CONST(int, GL_MINMAX_SINK_EXT, 0x8030) \
	CONST(int, GL_TABLE_TOO_LARGE_EXT, 0x8031) \
	FUNC(void , glGetHistogramEXT, GLGETHISTOGRAMEXT, (GLenum target , GLboolean reset , GLenum format , GLenum type , GLvoid * values ), (target, reset, format, type, values)) \
	FUNC(void , glGetHistogramParameterfvEXT, GLGETHISTOGRAMPARAMETERFVEXT, (GLenum target , GLenum pname , GLfloat * params ), (target, pname, params)) \
	FUNC(void , glGetHistogramParameterivEXT, GLGETHISTOGRAMPARAMETERIVEXT, (GLenum target , GLenum pname , GLint * params ), (target, pname, params)) \
	FUNC(void , glGetMinmaxEXT, GLGETMINMAXEXT, (GLenum target , GLboolean reset , GLenum format , GLenum type , GLvoid * values ), (target, reset, format, type, values)) \
	FUNC(void , glGetMinmaxParameterfvEXT, GLGETMINMAXPARAMETERFVEXT, (GLenum target , GLenum pname , GLfloat * params ), (target, pname, params)) \
	FUNC(void , glGetMinmaxParameterivEXT, GLGETMINMAXPARAMETERIVEXT, (GLenum target , GLenum pname , GLint * params ), (target, pname, params)) \
	FUNC(void , glHistogramEXT, GLHISTOGRAMEXT, (GLenum target , GLsizei width , GLenum internalformat , GLboolean sink ), (target, width, internalformat, sink)) \
	FUNC(void , glMinmaxEXT, GLMINMAXEXT, (GLenum target , GLenum internalformat , GLboolean sink ), (target, internalformat, sink)) \
	FUNC(void , glResetHistogramEXT, GLRESETHISTOGRAMEXT, (GLenum target ), (target)) \
	FUNC(void , glResetMinmaxEXT, GLRESETMINMAXEXT, (GLenum target ), (target)) \
	END()
#else
#define EXTENSION_GL_EXT_histogram(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_index_array_formats
#define GL_EXT_index_array_formats 1
#define EXTENSION_GL_EXT_index_array_formats(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_index_array_formats) \
	CONST(int, GL_IUI_V2F_EXT, 0x81AD) \
	CONST(int, GL_IUI_V3F_EXT, 0x81AE) \
	CONST(int, GL_IUI_N3F_V2F_EXT, 0x81AF) \
	CONST(int, GL_IUI_N3F_V3F_EXT, 0x81B0) \
	CONST(int, GL_T2F_IUI_V2F_EXT, 0x81B1) \
	CONST(int, GL_T2F_IUI_V3F_EXT, 0x81B2) \
	CONST(int, GL_T2F_IUI_N3F_V2F_EXT, 0x81B3) \
	CONST(int, GL_T2F_IUI_N3F_V3F_EXT, 0x81B4) \
	END()
#else
#define EXTENSION_GL_EXT_index_array_formats(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_index_func
#define GL_EXT_index_func 1
#define EXTENSION_GL_EXT_index_func(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_index_func) \
	CONST(int, GL_INDEX_TEST_EXT, 0x81B5) \
	CONST(int, GL_INDEX_TEST_FUNC_EXT, 0x81B6) \
	CONST(int, GL_INDEX_TEST_REF_EXT, 0x81B7) \
	FUNC(void , glIndexFuncEXT, GLINDEXFUNCEXT, (GLenum func , GLclampf ref ), (func, ref)) \
	END()
#else
#define EXTENSION_GL_EXT_index_func(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_index_material
#define GL_EXT_index_material 1
#define EXTENSION_GL_EXT_index_material(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_index_material) \
	CONST(int, GL_INDEX_MATERIAL_EXT, 0x81B8) \
	CONST(int, GL_INDEX_MATERIAL_PARAMETER_EXT, 0x81B9) \
	CONST(int, GL_INDEX_MATERIAL_FACE_EXT, 0x81BA) \
	FUNC(void , glIndexMaterialEXT, GLINDEXMATERIALEXT, (GLenum face , GLenum mode ), (face, mode)) \
	END()
#else
#define EXTENSION_GL_EXT_index_material(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_index_texture
#define GL_EXT_index_texture 1
#define EXTENSION_GL_EXT_index_texture(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_index_texture) \
	END()
#else
#define EXTENSION_GL_EXT_index_texture(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_light_texture
#define GL_EXT_light_texture 1
#define EXTENSION_GL_EXT_light_texture(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_light_texture) \
	CONST(int, GL_FRAGMENT_MATERIAL_EXT, 0x8349) \
	CONST(int, GL_FRAGMENT_NORMAL_EXT, 0x834A) \
	CONST(int, GL_FRAGMENT_COLOR_EXT, 0x834C) \
	CONST(int, GL_ATTENUATION_EXT, 0x834D) \
	CONST(int, GL_SHADOW_ATTENUATION_EXT, 0x834E) \
	CONST(int, GL_TEXTURE_APPLICATION_MODE_EXT, 0x834F) \
	CONST(int, GL_TEXTURE_LIGHT_EXT, 0x8350) \
	CONST(int, GL_TEXTURE_MATERIAL_FACE_EXT, 0x8351) \
	CONST(int, GL_TEXTURE_MATERIAL_PARAMETER_EXT, 0x8352) \
	FUNC(void , glApplyTextureEXT, GLAPPLYTEXTUREEXT, (GLenum mode ), (mode)) \
	FUNC(void , glTextureLightEXT, GLTEXTURELIGHTEXT, (GLenum pname ), (pname)) \
	FUNC(void , glTextureMaterialEXT, GLTEXTUREMATERIALEXT, (GLenum face , GLenum mode ), (face, mode)) \
	END()
#else
#define EXTENSION_GL_EXT_light_texture(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_misc_attribute
#define GL_EXT_misc_attribute 1
#define EXTENSION_GL_EXT_misc_attribute(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_misc_attribute) \
	END()
#else
#define EXTENSION_GL_EXT_misc_attribute(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_multi_draw_arrays
#define GL_EXT_multi_draw_arrays 1
#define EXTENSION_GL_EXT_multi_draw_arrays(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_multi_draw_arrays) \
	FUNC(void , glMultiDrawArraysEXT, GLMULTIDRAWARRAYSEXT, (GLenum mode , const GLint * first , const GLsizei * count , GLsizei primcount ), (mode, first, count, primcount)) \
	FUNC(void , glMultiDrawElementsEXT, GLMULTIDRAWELEMENTSEXT, (GLenum mode , const GLsizei * count , GLenum type , const GLvoid * * indices , GLsizei primcount ), (mode, count, type, indices, primcount)) \
	END()
#else
#define EXTENSION_GL_EXT_multi_draw_arrays(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_multisample
#define GL_EXT_multisample 1
#define EXTENSION_GL_EXT_multisample(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_multisample) \
	CONST(int, GL_MULTISAMPLE_EXT, 0x809D) \
	CONST(int, GL_SAMPLE_ALPHA_TO_MASK_EXT, 0x809E) \
	CONST(int, GL_SAMPLE_ALPHA_TO_ONE_EXT, 0x809F) \
	CONST(int, GL_SAMPLE_MASK_EXT, 0x80A0) \
	CONST(int, GL_1PASS_EXT, 0x80A1) \
	CONST(int, GL_2PASS_0_EXT, 0x80A2) \
	CONST(int, GL_2PASS_1_EXT, 0x80A3) \
	CONST(int, GL_4PASS_0_EXT, 0x80A4) \
	CONST(int, GL_4PASS_1_EXT, 0x80A5) \
	CONST(int, GL_4PASS_2_EXT, 0x80A6) \
	CONST(int, GL_4PASS_3_EXT, 0x80A7) \
	CONST(int, GL_SAMPLE_BUFFERS_EXT, 0x80A8) \
	CONST(int, GL_SAMPLES_EXT, 0x80A9) \
	CONST(int, GL_SAMPLE_MASK_VALUE_EXT, 0x80AA) \
	CONST(int, GL_SAMPLE_MASK_INVERT_EXT, 0x80AB) \
	CONST(int, GL_SAMPLE_PATTERN_EXT, 0x80AC) \
	CONST(int, GL_MULTISAMPLE_BIT_EXT, 0x20000000) \
	FUNC(void , glSampleMaskEXT, GLSAMPLEMASKEXT, (GLclampf value , GLboolean invert ), (value, invert)) \
	FUNC(void , glSamplePatternEXT, GLSAMPLEPATTERNEXT, (GLenum pattern ), (pattern)) \
	END()
#else
#define EXTENSION_GL_EXT_multisample(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_packed_depth_stencil
#define GL_EXT_packed_depth_stencil 1
#define EXTENSION_GL_EXT_packed_depth_stencil(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_packed_depth_stencil) \
	CONST(int, GL_DEPTH_STENCIL_EXT, 0x84F9) \
	CONST(int, GL_UNSIGNED_INT_24_8_EXT, 0x84FA) \
	CONST(int, GL_DEPTH24_STENCIL8_EXT, 0x88F0) \
	CONST(int, GL_TEXTURE_STENCIL_SIZE_EXT, 0x88F1) \
	END()
#else
#define EXTENSION_GL_EXT_packed_depth_stencil(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_packed_float
#define GL_EXT_packed_float 1
#define EXTENSION_GL_EXT_packed_float(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_packed_float) \
	CONST(int, GL_R11F_G11F_B10F_EXT, 0x8C3A) \
	CONST(int, GL_UNSIGNED_INT_10F_11F_11F_REV_EXT, 0x8C3B) \
	CONST(int, GL_RGBA_SIGNED_COMPONENTS_EXT, 0x8C3C) \
	END()
#else
#define EXTENSION_GL_EXT_packed_float(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_packed_pixels
#define GL_EXT_packed_pixels 1
#define EXTENSION_GL_EXT_packed_pixels(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_packed_pixels) \
	CONST(int, GL_UNSIGNED_BYTE_3_3_2_EXT, 0x8032) \
	CONST(int, GL_UNSIGNED_SHORT_4_4_4_4_EXT, 0x8033) \
	CONST(int, GL_UNSIGNED_SHORT_5_5_5_1_EXT, 0x8034) \
	CONST(int, GL_UNSIGNED_INT_8_8_8_8_EXT, 0x8035) \
	CONST(int, GL_UNSIGNED_INT_10_10_10_2_EXT, 0x8036) \
	END()
#else
#define EXTENSION_GL_EXT_packed_pixels(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_paletted_texture
#define GL_EXT_paletted_texture 1
#define EXTENSION_GL_EXT_paletted_texture(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_paletted_texture) \
	CONST(int, GL_COLOR_INDEX1_EXT, 0x80E2) \
	CONST(int, GL_COLOR_INDEX2_EXT, 0x80E3) \
	CONST(int, GL_COLOR_INDEX4_EXT, 0x80E4) \
	CONST(int, GL_COLOR_INDEX8_EXT, 0x80E5) \
	CONST(int, GL_COLOR_INDEX12_EXT, 0x80E6) \
	CONST(int, GL_COLOR_INDEX16_EXT, 0x80E7) \
	CONST(int, GL_TEXTURE_INDEX_SIZE_EXT, 0x80ED) \
	FUNC(void , glColorTableEXT, GLCOLORTABLEEXT, (GLenum target , GLenum internalFormat , GLsizei width , GLenum format , GLenum type , const GLvoid * table ), (target, internalFormat, width, format, type, table)) \
	FUNC(void , glGetColorTableEXT, GLGETCOLORTABLEEXT, (GLenum target , GLenum format , GLenum type , GLvoid * data ), (target, format, type, data)) \
	FUNC(void , glGetColorTableParameterivEXT, GLGETCOLORTABLEPARAMETERIVEXT, (GLenum target , GLenum pname , GLint * params ), (target, pname, params)) \
	FUNC(void , glGetColorTableParameterfvEXT, GLGETCOLORTABLEPARAMETERFVEXT, (GLenum target , GLenum pname , GLfloat * params ), (target, pname, params)) \
	END()
#else
#define EXTENSION_GL_EXT_paletted_texture(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_pixel_buffer_object
#define GL_EXT_pixel_buffer_object 1
#define EXTENSION_GL_EXT_pixel_buffer_object(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_pixel_buffer_object) \
	CONST(int, GL_PIXEL_PACK_BUFFER_EXT, 0x88EB) \
	CONST(int, GL_PIXEL_UNPACK_BUFFER_EXT, 0x88EC) \
	CONST(int, GL_PIXEL_PACK_BUFFER_BINDING_EXT, 0x88ED) \
	CONST(int, GL_PIXEL_UNPACK_BUFFER_BINDING_EXT, 0x88EF) \
	END()
#else
#define EXTENSION_GL_EXT_pixel_buffer_object(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_pixel_transform
#define GL_EXT_pixel_transform 1
#define EXTENSION_GL_EXT_pixel_transform(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_pixel_transform) \
	CONST(int, GL_PIXEL_TRANSFORM_2D_EXT, 0x8330) \
	CONST(int, GL_PIXEL_MAG_FILTER_EXT, 0x8331) \
	CONST(int, GL_PIXEL_MIN_FILTER_EXT, 0x8332) \
	CONST(int, GL_PIXEL_CUBIC_WEIGHT_EXT, 0x8333) \
	CONST(int, GL_CUBIC_EXT, 0x8334) \
	CONST(int, GL_AVERAGE_EXT, 0x8335) \
	CONST(int, GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT, 0x8336) \
	CONST(int, GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT, 0x8337) \
	CONST(int, GL_PIXEL_TRANSFORM_2D_MATRIX_EXT, 0x8338) \
	FUNC(void , glPixelTransformParameteriEXT, GLPIXELTRANSFORMPARAMETERIEXT, (GLenum target , GLenum pname , GLint param ), (target, pname, param)) \
	FUNC(void , glPixelTransformParameterfEXT, GLPIXELTRANSFORMPARAMETERFEXT, (GLenum target , GLenum pname , GLfloat param ), (target, pname, param)) \
	FUNC(void , glPixelTransformParameterivEXT, GLPIXELTRANSFORMPARAMETERIVEXT, (GLenum target , GLenum pname , const GLint * params ), (target, pname, params)) \
	FUNC(void , glPixelTransformParameterfvEXT, GLPIXELTRANSFORMPARAMETERFVEXT, (GLenum target , GLenum pname , const GLfloat * params ), (target, pname, params)) \
	END()
#else
#define EXTENSION_GL_EXT_pixel_transform(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_pixel_transform_color_table
#define GL_EXT_pixel_transform_color_table 1
#define EXTENSION_GL_EXT_pixel_transform_color_table(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_pixel_transform_color_table) \
	END()
#else
#define EXTENSION_GL_EXT_pixel_transform_color_table(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_point_parameters
#define GL_EXT_point_parameters 1
#define EXTENSION_GL_EXT_point_parameters(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_point_parameters) \
	CONST(int, GL_POINT_SIZE_MIN_EXT, 0x8126) \
	CONST(int, GL_POINT_SIZE_MAX_EXT, 0x8127) \
	CONST(int, GL_POINT_FADE_THRESHOLD_SIZE_EXT, 0x8128) \
	CONST(int, GL_DISTANCE_ATTENUATION_EXT, 0x8129) \
	FUNC(void , glPointParameterfEXT, GLPOINTPARAMETERFEXT, (GLenum pname , GLfloat param ), (pname, param)) \
	FUNC(void , glPointParameterfvEXT, GLPOINTPARAMETERFVEXT, (GLenum pname , const GLfloat * params ), (pname, params)) \
	END()
#else
#define EXTENSION_GL_EXT_point_parameters(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_polygon_offset
#define GL_EXT_polygon_offset 1
#define EXTENSION_GL_EXT_polygon_offset(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_polygon_offset) \
	CONST(int, GL_POLYGON_OFFSET_EXT, 0x8037) \
	CONST(int, GL_POLYGON_OFFSET_FACTOR_EXT, 0x8038) \
	CONST(int, GL_POLYGON_OFFSET_BIAS_EXT, 0x8039) \
	FUNC(void , glPolygonOffsetEXT, GLPOLYGONOFFSETEXT, (GLfloat factor , GLfloat bias ), (factor, bias)) \
	END()
#else
#define EXTENSION_GL_EXT_polygon_offset(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_provoking_vertex
#define GL_EXT_provoking_vertex 1
#define EXTENSION_GL_EXT_provoking_vertex(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_provoking_vertex) \
	CONST(int, GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT, 0x8E4C) \
	CONST(int, GL_FIRST_VERTEX_CONVENTION_EXT, 0x8E4D) \
	CONST(int, GL_LAST_VERTEX_CONVENTION_EXT, 0x8E4E) \
	CONST(int, GL_PROVOKING_VERTEX_EXT, 0x8E4F) \
	FUNC(void , glProvokingVertexEXT, GLPROVOKINGVERTEXEXT, (GLenum mode ), (mode)) \
	END()
#else
#define EXTENSION_GL_EXT_provoking_vertex(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_rescale_normal
#define GL_EXT_rescale_normal 1
#define EXTENSION_GL_EXT_rescale_normal(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_rescale_normal) \
	CONST(int, GL_RESCALE_NORMAL_EXT, 0x803A) \
	END()
#else
#define EXTENSION_GL_EXT_rescale_normal(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_secondary_color
#define GL_EXT_secondary_color 1
#define EXTENSION_GL_EXT_secondary_color(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_secondary_color) \
	CONST(int, GL_COLOR_SUM_EXT, 0x8458) \
	CONST(int, GL_CURRENT_SECONDARY_COLOR_EXT, 0x8459) \
	CONST(int, GL_SECONDARY_COLOR_ARRAY_SIZE_EXT, 0x845A) \
	CONST(int, GL_SECONDARY_COLOR_ARRAY_TYPE_EXT, 0x845B) \
	CONST(int, GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT, 0x845C) \
	CONST(int, GL_SECONDARY_COLOR_ARRAY_POINTER_EXT, 0x845D) \
	CONST(int, GL_SECONDARY_COLOR_ARRAY_EXT, 0x845E) \
	FUNC(void , glSecondaryColor3bEXT, GLSECONDARYCOLOR3BEXT, (GLbyte red , GLbyte green , GLbyte blue ), (red, green, blue)) \
	FUNC(void , glSecondaryColor3bvEXT, GLSECONDARYCOLOR3BVEXT, (const GLbyte * v ), (v)) \
	FUNC(void , glSecondaryColor3dEXT, GLSECONDARYCOLOR3DEXT, (GLdouble red , GLdouble green , GLdouble blue ), (red, green, blue)) \
	FUNC(void , glSecondaryColor3dvEXT, GLSECONDARYCOLOR3DVEXT, (const GLdouble * v ), (v)) \
	FUNC(void , glSecondaryColor3fEXT, GLSECONDARYCOLOR3FEXT, (GLfloat red , GLfloat green , GLfloat blue ), (red, green, blue)) \
	FUNC(void , glSecondaryColor3fvEXT, GLSECONDARYCOLOR3FVEXT, (const GLfloat * v ), (v)) \
	FUNC(void , glSecondaryColor3iEXT, GLSECONDARYCOLOR3IEXT, (GLint red , GLint green , GLint blue ), (red, green, blue)) \
	FUNC(void , glSecondaryColor3ivEXT, GLSECONDARYCOLOR3IVEXT, (const GLint * v ), (v)) \
	FUNC(void , glSecondaryColor3sEXT, GLSECONDARYCOLOR3SEXT, (GLshort red , GLshort green , GLshort blue ), (red, green, blue)) \
	FUNC(void , glSecondaryColor3svEXT, GLSECONDARYCOLOR3SVEXT, (const GLshort * v ), (v)) \
	FUNC(void , glSecondaryColor3ubEXT, GLSECONDARYCOLOR3UBEXT, (GLubyte red , GLubyte green , GLubyte blue ), (red, green, blue)) \
	FUNC(void , glSecondaryColor3ubvEXT, GLSECONDARYCOLOR3UBVEXT, (const GLubyte * v ), (v)) \
	FUNC(void , glSecondaryColor3uiEXT, GLSECONDARYCOLOR3UIEXT, (GLuint red , GLuint green , GLuint blue ), (red, green, blue)) \
	FUNC(void , glSecondaryColor3uivEXT, GLSECONDARYCOLOR3UIVEXT, (const GLuint * v ), (v)) \
	FUNC(void , glSecondaryColor3usEXT, GLSECONDARYCOLOR3USEXT, (GLushort red , GLushort green , GLushort blue ), (red, green, blue)) \
	FUNC(void , glSecondaryColor3usvEXT, GLSECONDARYCOLOR3USVEXT, (const GLushort * v ), (v)) \
	FUNC(void , glSecondaryColorPointerEXT, GLSECONDARYCOLORPOINTEREXT, (GLint size , GLenum type , GLsizei stride , const GLvoid * pointer ), (size, type, stride, pointer)) \
	END()
#else
#define EXTENSION_GL_EXT_secondary_color(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_separate_shader_objects
#define GL_EXT_separate_shader_objects 1
#define EXTENSION_GL_EXT_separate_shader_objects(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_separate_shader_objects) \
	CONST(int, GL_ACTIVE_PROGRAM_EXT, 0x8B8D) \
	FUNC(void , glUseShaderProgramEXT, GLUSESHADERPROGRAMEXT, (GLenum type , GLuint program ), (type, program)) \
	FUNC(void , glActiveProgramEXT, GLACTIVEPROGRAMEXT, (GLuint program ), (program)) \
	FUNC(GLuint , glCreateShaderProgramEXT, GLCREATESHADERPROGRAMEXT, (GLenum type , const GLchar * string ), (type, string)) \
	END()
#else
#define EXTENSION_GL_EXT_separate_shader_objects(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_separate_specular_color
#define GL_EXT_separate_specular_color 1
#define EXTENSION_GL_EXT_separate_specular_color(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_separate_specular_color) \
	CONST(int, GL_LIGHT_MODEL_COLOR_CONTROL_EXT, 0x81F8) \
	CONST(int, GL_SINGLE_COLOR_EXT, 0x81F9) \
	CONST(int, GL_SEPARATE_SPECULAR_COLOR_EXT, 0x81FA) \
	END()
#else
#define EXTENSION_GL_EXT_separate_specular_color(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_shader_image_load_store
#define GL_EXT_shader_image_load_store 1
#define EXTENSION_GL_EXT_shader_image_load_store(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_shader_image_load_store) \
	CONST(int, GL_MAX_IMAGE_UNITS_EXT, 0x8F38) \
	CONST(int, GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS_EXT, 0x8F39) \
	CONST(int, GL_IMAGE_BINDING_NAME_EXT, 0x8F3A) \
	CONST(int, GL_IMAGE_BINDING_LEVEL_EXT, 0x8F3B) \
	CONST(int, GL_IMAGE_BINDING_LAYERED_EXT, 0x8F3C) \
	CONST(int, GL_IMAGE_BINDING_LAYER_EXT, 0x8F3D) \
	CONST(int, GL_IMAGE_BINDING_ACCESS_EXT, 0x8F3E) \
	CONST(int, GL_IMAGE_1D_EXT, 0x904C) \
	CONST(int, GL_IMAGE_2D_EXT, 0x904D) \
	CONST(int, GL_IMAGE_3D_EXT, 0x904E) \
	CONST(int, GL_IMAGE_2D_RECT_EXT, 0x904F) \
	CONST(int, GL_IMAGE_CUBE_EXT, 0x9050) \
	CONST(int, GL_IMAGE_BUFFER_EXT, 0x9051) \
	CONST(int, GL_IMAGE_1D_ARRAY_EXT, 0x9052) \
	CONST(int, GL_IMAGE_2D_ARRAY_EXT, 0x9053) \
	CONST(int, GL_IMAGE_CUBE_MAP_ARRAY_EXT, 0x9054) \
	CONST(int, GL_IMAGE_2D_MULTISAMPLE_EXT, 0x9055) \
	CONST(int, GL_IMAGE_2D_MULTISAMPLE_ARRAY_EXT, 0x9056) \
	CONST(int, GL_INT_IMAGE_1D_EXT, 0x9057) \
	CONST(int, GL_INT_IMAGE_2D_EXT, 0x9058) \
	CONST(int, GL_INT_IMAGE_3D_EXT, 0x9059) \
	CONST(int, GL_INT_IMAGE_2D_RECT_EXT, 0x905A) \
	CONST(int, GL_INT_IMAGE_CUBE_EXT, 0x905B) \
	CONST(int, GL_INT_IMAGE_BUFFER_EXT, 0x905C) \
	CONST(int, GL_INT_IMAGE_1D_ARRAY_EXT, 0x905D) \
	CONST(int, GL_INT_IMAGE_2D_ARRAY_EXT, 0x905E) \
	CONST(int, GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT, 0x905F) \
	CONST(int, GL_INT_IMAGE_2D_MULTISAMPLE_EXT, 0x9060) \
	CONST(int, GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT, 0x9061) \
	CONST(int, GL_UNSIGNED_INT_IMAGE_1D_EXT, 0x9062) \
	CONST(int, GL_UNSIGNED_INT_IMAGE_2D_EXT, 0x9063) \
	CONST(int, GL_UNSIGNED_INT_IMAGE_3D_EXT, 0x9064) \
	CONST(int, GL_UNSIGNED_INT_IMAGE_2D_RECT_EXT, 0x9065) \
	CONST(int, GL_UNSIGNED_INT_IMAGE_CUBE_EXT, 0x9066) \
	CONST(int, GL_UNSIGNED_INT_IMAGE_BUFFER_EXT, 0x9067) \
	CONST(int, GL_UNSIGNED_INT_IMAGE_1D_ARRAY_EXT, 0x9068) \
	CONST(int, GL_UNSIGNED_INT_IMAGE_2D_ARRAY_EXT, 0x9069) \
	CONST(int, GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT, 0x906A) \
	CONST(int, GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_EXT, 0x906B) \
	CONST(int, GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT, 0x906C) \
	CONST(int, GL_MAX_IMAGE_SAMPLES_EXT, 0x906D) \
	CONST(int, GL_IMAGE_BINDING_FORMAT_EXT, 0x906E) \
	CONST(int, GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT_EXT, 0x00000001) \
	CONST(int, GL_ELEMENT_ARRAY_BARRIER_BIT_EXT, 0x00000002) \
	CONST(int, GL_UNIFORM_BARRIER_BIT_EXT, 0x00000004) \
	CONST(int, GL_TEXTURE_FETCH_BARRIER_BIT_EXT, 0x00000008) \
	CONST(int, GL_SHADER_IMAGE_ACCESS_BARRIER_BIT_EXT, 0x00000020) \
	CONST(int, GL_COMMAND_BARRIER_BIT_EXT, 0x00000040) \
	CONST(int, GL_PIXEL_BUFFER_BARRIER_BIT_EXT, 0x00000080) \
	CONST(int, GL_TEXTURE_UPDATE_BARRIER_BIT_EXT, 0x00000100) \
	CONST(int, GL_BUFFER_UPDATE_BARRIER_BIT_EXT, 0x00000200) \
	CONST(int, GL_FRAMEBUFFER_BARRIER_BIT_EXT, 0x00000400) \
	CONST(int, GL_TRANSFORM_FEEDBACK_BARRIER_BIT_EXT, 0x00000800) \
	CONST(int, GL_ATOMIC_COUNTER_BARRIER_BIT_EXT, 0x00001000) \
	CONST(int, GL_ALL_BARRIER_BITS_EXT, 0xFFFFFFFF) \
	FUNC(void , glBindImageTextureEXT, GLBINDIMAGETEXTUREEXT, (GLuint index , GLuint texture , GLint level , GLboolean layered , GLint layer , GLenum access , GLint format ), (index, texture, level, layered, layer, access, format)) \
	FUNC(void , glMemoryBarrierEXT, GLMEMORYBARRIEREXT, (GLbitfield barriers ), (barriers)) \
	END()
#else
#define EXTENSION_GL_EXT_shader_image_load_store(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_shadow_funcs
#define GL_EXT_shadow_funcs 1
#define EXTENSION_GL_EXT_shadow_funcs(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_shadow_funcs) \
	END()
#else
#define EXTENSION_GL_EXT_shadow_funcs(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_shared_texture_palette
#define GL_EXT_shared_texture_palette 1
#define EXTENSION_GL_EXT_shared_texture_palette(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_shared_texture_palette) \
	CONST(int, GL_SHARED_TEXTURE_PALETTE_EXT, 0x81FB) \
	END()
#else
#define EXTENSION_GL_EXT_shared_texture_palette(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_stencil_clear_tag
#define GL_EXT_stencil_clear_tag 1
#define EXTENSION_GL_EXT_stencil_clear_tag(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_stencil_clear_tag) \
	CONST(int, GL_STENCIL_TAG_BITS_EXT, 0x88F2) \
	CONST(int, GL_STENCIL_CLEAR_TAG_VALUE_EXT, 0x88F3) \
	FUNC(void , glStencilClearTagEXT, GLSTENCILCLEARTAGEXT, (GLsizei stencilTagBits , GLuint stencilClearTag ), (stencilTagBits, stencilClearTag)) \
	END()
#else
#define EXTENSION_GL_EXT_stencil_clear_tag(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_stencil_two_side
#define GL_EXT_stencil_two_side 1
#define EXTENSION_GL_EXT_stencil_two_side(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_stencil_two_side) \
	CONST(int, GL_STENCIL_TEST_TWO_SIDE_EXT, 0x8910) \
	CONST(int, GL_ACTIVE_STENCIL_FACE_EXT, 0x8911) \
	FUNC(void , glActiveStencilFaceEXT, GLACTIVESTENCILFACEEXT, (GLenum face ), (face)) \
	END()
#else
#define EXTENSION_GL_EXT_stencil_two_side(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_stencil_wrap
#define GL_EXT_stencil_wrap 1
#define EXTENSION_GL_EXT_stencil_wrap(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_stencil_wrap) \
	CONST(int, GL_INCR_WRAP_EXT, 0x8507) \
	CONST(int, GL_DECR_WRAP_EXT, 0x8508) \
	END()
#else
#define EXTENSION_GL_EXT_stencil_wrap(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_subtexture
#define GL_EXT_subtexture 1
#define EXTENSION_GL_EXT_subtexture(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_subtexture) \
	FUNC(void , glTexSubImage1DEXT, GLTEXSUBIMAGE1DEXT, (GLenum target , GLint level , GLint xoffset , GLsizei width , GLenum format , GLenum type , const GLvoid * pixels ), (target, level, xoffset, width, format, type, pixels)) \
	FUNC(void , glTexSubImage2DEXT, GLTEXSUBIMAGE2DEXT, (GLenum target , GLint level , GLint xoffset , GLint yoffset , GLsizei width , GLsizei height , GLenum format , GLenum type , const GLvoid * pixels ), (target, level, xoffset, yoffset, width, height, format, type, pixels)) \
	END()
#else
#define EXTENSION_GL_EXT_subtexture(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_texture
#define GL_EXT_texture 1
#define EXTENSION_GL_EXT_texture(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_texture) \
	CONST(int, GL_ALPHA4_EXT, 0x803B) \
	CONST(int, GL_ALPHA8_EXT, 0x803C) \
	CONST(int, GL_ALPHA12_EXT, 0x803D) \
	CONST(int, GL_ALPHA16_EXT, 0x803E) \
	CONST(int, GL_LUMINANCE4_EXT, 0x803F) \
	CONST(int, GL_LUMINANCE8_EXT, 0x8040) \
	CONST(int, GL_LUMINANCE12_EXT, 0x8041) \
	CONST(int, GL_LUMINANCE16_EXT, 0x8042) \
	CONST(int, GL_LUMINANCE4_ALPHA4_EXT, 0x8043) \
	CONST(int, GL_LUMINANCE6_ALPHA2_EXT, 0x8044) \
	CONST(int, GL_LUMINANCE8_ALPHA8_EXT, 0x8045) \
	CONST(int, GL_LUMINANCE12_ALPHA4_EXT, 0x8046) \
	CONST(int, GL_LUMINANCE12_ALPHA12_EXT, 0x8047) \
	CONST(int, GL_LUMINANCE16_ALPHA16_EXT, 0x8048) \
	CONST(int, GL_INTENSITY_EXT, 0x8049) \
	CONST(int, GL_INTENSITY4_EXT, 0x804A) \
	CONST(int, GL_INTENSITY8_EXT, 0x804B) \
	CONST(int, GL_INTENSITY12_EXT, 0x804C) \
	CONST(int, GL_INTENSITY16_EXT, 0x804D) \
	CONST(int, GL_RGB2_EXT, 0x804E) \
	CONST(int, GL_RGB4_EXT, 0x804F) \
	CONST(int, GL_RGB5_EXT, 0x8050) \
	CONST(int, GL_RGB8_EXT, 0x8051) \
	CONST(int, GL_RGB10_EXT, 0x8052) \
	CONST(int, GL_RGB12_EXT, 0x8053) \
	CONST(int, GL_RGB16_EXT, 0x8054) \
	CONST(int, GL_RGBA2_EXT, 0x8055) \
	CONST(int, GL_RGBA4_EXT, 0x8056) \
	CONST(int, GL_RGB5_A1_EXT, 0x8057) \
	CONST(int, GL_RGBA8_EXT, 0x8058) \
	CONST(int, GL_RGB10_A2_EXT, 0x8059) \
	CONST(int, GL_RGBA12_EXT, 0x805A) \
	CONST(int, GL_RGBA16_EXT, 0x805B) \
	CONST(int, GL_TEXTURE_RED_SIZE_EXT, 0x805C) \
	CONST(int, GL_TEXTURE_GREEN_SIZE_EXT, 0x805D) \
	CONST(int, GL_TEXTURE_BLUE_SIZE_EXT, 0x805E) \
	CONST(int, GL_TEXTURE_ALPHA_SIZE_EXT, 0x805F) \
	CONST(int, GL_TEXTURE_LUMINANCE_SIZE_EXT, 0x8060) \
	CONST(int, GL_TEXTURE_INTENSITY_SIZE_EXT, 0x8061) \
	CONST(int, GL_REPLACE_EXT, 0x8062) \
	CONST(int, GL_PROXY_TEXTURE_1D_EXT, 0x8063) \
	CONST(int, GL_PROXY_TEXTURE_2D_EXT, 0x8064) \
	CONST(int, GL_TEXTURE_TOO_LARGE_EXT, 0x8065) \
	END()
#else
#define EXTENSION_GL_EXT_texture(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_texture3D
#define GL_EXT_texture3D 1
#define EXTENSION_GL_EXT_texture3D(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_texture3D) \
	CONST(int, GL_PACK_SKIP_IMAGES_EXT, 0x806B) \
	CONST(int, GL_PACK_IMAGE_HEIGHT_EXT, 0x806C) \
	CONST(int, GL_UNPACK_SKIP_IMAGES_EXT, 0x806D) \
	CONST(int, GL_UNPACK_IMAGE_HEIGHT_EXT, 0x806E) \
	CONST(int, GL_TEXTURE_3D_EXT, 0x806F) \
	CONST(int, GL_PROXY_TEXTURE_3D_EXT, 0x8070) \
	CONST(int, GL_TEXTURE_DEPTH_EXT, 0x8071) \
	CONST(int, GL_TEXTURE_WRAP_R_EXT, 0x8072) \
	CONST(int, GL_MAX_3D_TEXTURE_SIZE_EXT, 0x8073) \
	FUNC(void , glTexImage3DEXT, GLTEXIMAGE3DEXT, (GLenum target , GLint level , GLenum internalformat , GLsizei width , GLsizei height , GLsizei depth , GLint border , GLenum format , GLenum type , const GLvoid * pixels ), (target, level, internalformat, width, height, depth, border, format, type, pixels)) \
	FUNC(void , glTexSubImage3DEXT, GLTEXSUBIMAGE3DEXT, (GLenum target , GLint level , GLint xoffset , GLint yoffset , GLint zoffset , GLsizei width , GLsizei height , GLsizei depth , GLenum format , GLenum type , const GLvoid * pixels ), (target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels)) \
	END()
#else
#define EXTENSION_GL_EXT_texture3D(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_texture_array
#define GL_EXT_texture_array 1
#define EXTENSION_GL_EXT_texture_array(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_texture_array) \
	CONST(int, GL_TEXTURE_1D_ARRAY_EXT, 0x8C18) \
	CONST(int, GL_PROXY_TEXTURE_1D_ARRAY_EXT, 0x8C19) \
	CONST(int, GL_TEXTURE_2D_ARRAY_EXT, 0x8C1A) \
	CONST(int, GL_PROXY_TEXTURE_2D_ARRAY_EXT, 0x8C1B) \
	CONST(int, GL_TEXTURE_BINDING_1D_ARRAY_EXT, 0x8C1C) \
	CONST(int, GL_TEXTURE_BINDING_2D_ARRAY_EXT, 0x8C1D) \
	CONST(int, GL_MAX_ARRAY_TEXTURE_LAYERS_EXT, 0x88FF) \
	CONST(int, GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT, 0x884E) \
	END()
#else
#define EXTENSION_GL_EXT_texture_array(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_texture_buffer_object
#define GL_EXT_texture_buffer_object 1
#define EXTENSION_GL_EXT_texture_buffer_object(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_texture_buffer_object) \
	CONST(int, GL_TEXTURE_BUFFER_EXT, 0x8C2A) \
	CONST(int, GL_MAX_TEXTURE_BUFFER_SIZE_EXT, 0x8C2B) \
	CONST(int, GL_TEXTURE_BINDING_BUFFER_EXT, 0x8C2C) \
	CONST(int, GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT, 0x8C2D) \
	CONST(int, GL_TEXTURE_BUFFER_FORMAT_EXT, 0x8C2E) \
	FUNC(void , glTexBufferEXT, GLTEXBUFFEREXT, (GLenum target , GLenum internalformat , GLuint buffer ), (target, internalformat, buffer)) \
	END()
#else
#define EXTENSION_GL_EXT_texture_buffer_object(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_texture_compression_latc
#define GL_EXT_texture_compression_latc 1
#define EXTENSION_GL_EXT_texture_compression_latc(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_texture_compression_latc) \
	CONST(int, GL_COMPRESSED_LUMINANCE_LATC1_EXT, 0x8C70) \
	CONST(int, GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT, 0x8C71) \
	CONST(int, GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT, 0x8C72) \
	CONST(int, GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT, 0x8C73) \
	END()
#else
#define EXTENSION_GL_EXT_texture_compression_latc(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_texture_compression_rgtc
#define GL_EXT_texture_compression_rgtc 1
#define EXTENSION_GL_EXT_texture_compression_rgtc(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_texture_compression_rgtc) \
	CONST(int, GL_COMPRESSED_RED_RGTC1_EXT, 0x8DBB) \
	CONST(int, GL_COMPRESSED_SIGNED_RED_RGTC1_EXT, 0x8DBC) \
	CONST(int, GL_COMPRESSED_RED_GREEN_RGTC2_EXT, 0x8DBD) \
	CONST(int, GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT, 0x8DBE) \
	END()
#else
#define EXTENSION_GL_EXT_texture_compression_rgtc(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_texture_compression_s3tc
#define GL_EXT_texture_compression_s3tc 1
#define EXTENSION_GL_EXT_texture_compression_s3tc(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_texture_compression_s3tc) \
	CONST(int, GL_COMPRESSED_RGB_S3TC_DXT1_EXT, 0x83F0) \
	CONST(int, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, 0x83F1) \
	CONST(int, GL_COMPRESSED_RGBA_S3TC_DXT3_EXT, 0x83F2) \
	CONST(int, GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, 0x83F3) \
	END()
#else
#define EXTENSION_GL_EXT_texture_compression_s3tc(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_texture_cube_map
#define GL_EXT_texture_cube_map 1
#define EXTENSION_GL_EXT_texture_cube_map(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_texture_cube_map) \
	CONST(int, GL_NORMAL_MAP_EXT, 0x8511) \
	CONST(int, GL_REFLECTION_MAP_EXT, 0x8512) \
	CONST(int, GL_TEXTURE_CUBE_MAP_EXT, 0x8513) \
	CONST(int, GL_TEXTURE_BINDING_CUBE_MAP_EXT, 0x8514) \
	CONST(int, GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT, 0x8515) \
	CONST(int, GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT, 0x8516) \
	CONST(int, GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT, 0x8517) \
	CONST(int, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT, 0x8518) \
	CONST(int, GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT, 0x8519) \
	CONST(int, GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT, 0x851A) \
	CONST(int, GL_PROXY_TEXTURE_CUBE_MAP_EXT, 0x851B) \
	CONST(int, GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT, 0x851C) \
	END()
#else
#define EXTENSION_GL_EXT_texture_cube_map(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_texture_env_add
#define GL_EXT_texture_env_add 1
#define EXTENSION_GL_EXT_texture_env_add(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_texture_env_add) \
	END()
#else
#define EXTENSION_GL_EXT_texture_env_add(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_texture_env_combine
#define GL_EXT_texture_env_combine 1
#define EXTENSION_GL_EXT_texture_env_combine(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_texture_env_combine) \
	CONST(int, GL_COMBINE_EXT, 0x8570) \
	CONST(int, GL_COMBINE_RGB_EXT, 0x8571) \
	CONST(int, GL_COMBINE_ALPHA_EXT, 0x8572) \
	CONST(int, GL_RGB_SCALE_EXT, 0x8573) \
	CONST(int, GL_ADD_SIGNED_EXT, 0x8574) \
	CONST(int, GL_INTERPOLATE_EXT, 0x8575) \
	CONST(int, GL_CONSTANT_EXT, 0x8576) \
	CONST(int, GL_PRIMARY_COLOR_EXT, 0x8577) \
	CONST(int, GL_PREVIOUS_EXT, 0x8578) \
	CONST(int, GL_SOURCE0_RGB_EXT, 0x8580) \
	CONST(int, GL_SOURCE1_RGB_EXT, 0x8581) \
	CONST(int, GL_SOURCE2_RGB_EXT, 0x8582) \
	CONST(int, GL_SOURCE0_ALPHA_EXT, 0x8588) \
	CONST(int, GL_SOURCE1_ALPHA_EXT, 0x8589) \
	CONST(int, GL_SOURCE2_ALPHA_EXT, 0x858A) \
	CONST(int, GL_OPERAND0_RGB_EXT, 0x8590) \
	CONST(int, GL_OPERAND1_RGB_EXT, 0x8591) \
	CONST(int, GL_OPERAND2_RGB_EXT, 0x8592) \
	CONST(int, GL_OPERAND0_ALPHA_EXT, 0x8598) \
	CONST(int, GL_OPERAND1_ALPHA_EXT, 0x8599) \
	CONST(int, GL_OPERAND2_ALPHA_EXT, 0x859A) \
	END()
#else
#define EXTENSION_GL_EXT_texture_env_combine(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_texture_env_dot3
#define GL_EXT_texture_env_dot3 1
#define EXTENSION_GL_EXT_texture_env_dot3(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_texture_env_dot3) \
	CONST(int, GL_DOT3_RGB_EXT, 0x8740) \
	CONST(int, GL_DOT3_RGBA_EXT, 0x8741) \
	END()
#else
#define EXTENSION_GL_EXT_texture_env_dot3(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_texture_filter_anisotropic
#define GL_EXT_texture_filter_anisotropic 1
#define EXTENSION_GL_EXT_texture_filter_anisotropic(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_texture_filter_anisotropic) \
	CONST(int, GL_TEXTURE_MAX_ANISOTROPY_EXT, 0x84FE) \
	CONST(int, GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, 0x84FF) \
	END()
#else
#define EXTENSION_GL_EXT_texture_filter_anisotropic(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_texture_integer
#define GL_EXT_texture_integer 1
#define EXTENSION_GL_EXT_texture_integer(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_texture_integer) \
	CONST(int, GL_RGBA32UI_EXT, 0x8D70) \
	CONST(int, GL_RGB32UI_EXT, 0x8D71) \
	CONST(int, GL_ALPHA32UI_EXT, 0x8D72) \
	CONST(int, GL_INTENSITY32UI_EXT, 0x8D73) \
	CONST(int, GL_LUMINANCE32UI_EXT, 0x8D74) \
	CONST(int, GL_LUMINANCE_ALPHA32UI_EXT, 0x8D75) \
	CONST(int, GL_RGBA16UI_EXT, 0x8D76) \
	CONST(int, GL_RGB16UI_EXT, 0x8D77) \
	CONST(int, GL_ALPHA16UI_EXT, 0x8D78) \
	CONST(int, GL_INTENSITY16UI_EXT, 0x8D79) \
	CONST(int, GL_LUMINANCE16UI_EXT, 0x8D7A) \
	CONST(int, GL_LUMINANCE_ALPHA16UI_EXT, 0x8D7B) \
	CONST(int, GL_RGBA8UI_EXT, 0x8D7C) \
	CONST(int, GL_RGB8UI_EXT, 0x8D7D) \
	CONST(int, GL_ALPHA8UI_EXT, 0x8D7E) \
	CONST(int, GL_INTENSITY8UI_EXT, 0x8D7F) \
	CONST(int, GL_LUMINANCE8UI_EXT, 0x8D80) \
	CONST(int, GL_LUMINANCE_ALPHA8UI_EXT, 0x8D81) \
	CONST(int, GL_RGBA32I_EXT, 0x8D82) \
	CONST(int, GL_RGB32I_EXT, 0x8D83) \
	CONST(int, GL_ALPHA32I_EXT, 0x8D84) \
	CONST(int, GL_INTENSITY32I_EXT, 0x8D85) \
	CONST(int, GL_LUMINANCE32I_EXT, 0x8D86) \
	CONST(int, GL_LUMINANCE_ALPHA32I_EXT, 0x8D87) \
	CONST(int, GL_RGBA16I_EXT, 0x8D88) \
	CONST(int, GL_RGB16I_EXT, 0x8D89) \
	CONST(int, GL_ALPHA16I_EXT, 0x8D8A) \
	CONST(int, GL_INTENSITY16I_EXT, 0x8D8B) \
	CONST(int, GL_LUMINANCE16I_EXT, 0x8D8C) \
	CONST(int, GL_LUMINANCE_ALPHA16I_EXT, 0x8D8D) \
	CONST(int, GL_RGBA8I_EXT, 0x8D8E) \
	CONST(int, GL_RGB8I_EXT, 0x8D8F) \
	CONST(int, GL_ALPHA8I_EXT, 0x8D90) \
	CONST(int, GL_INTENSITY8I_EXT, 0x8D91) \
	CONST(int, GL_LUMINANCE8I_EXT, 0x8D92) \
	CONST(int, GL_LUMINANCE_ALPHA8I_EXT, 0x8D93) \
	CONST(int, GL_RED_INTEGER_EXT, 0x8D94) \
	CONST(int, GL_GREEN_INTEGER_EXT, 0x8D95) \
	CONST(int, GL_BLUE_INTEGER_EXT, 0x8D96) \
	CONST(int, GL_ALPHA_INTEGER_EXT, 0x8D97) \
	CONST(int, GL_RGB_INTEGER_EXT, 0x8D98) \
	CONST(int, GL_RGBA_INTEGER_EXT, 0x8D99) \
	CONST(int, GL_BGR_INTEGER_EXT, 0x8D9A) \
	CONST(int, GL_BGRA_INTEGER_EXT, 0x8D9B) \
	CONST(int, GL_LUMINANCE_INTEGER_EXT, 0x8D9C) \
	CONST(int, GL_LUMINANCE_ALPHA_INTEGER_EXT, 0x8D9D) \
	CONST(int, GL_RGBA_INTEGER_MODE_EXT, 0x8D9E) \
	FUNC(void , glTexParameterIivEXT, GLTEXPARAMETERIIVEXT, (GLenum target , GLenum pname , const GLint * params ), (target, pname, params)) \
	FUNC(void , glTexParameterIuivEXT, GLTEXPARAMETERIUIVEXT, (GLenum target , GLenum pname , const GLuint * params ), (target, pname, params)) \
	FUNC(void , glGetTexParameterIivEXT, GLGETTEXPARAMETERIIVEXT, (GLenum target , GLenum pname , GLint * params ), (target, pname, params)) \
	FUNC(void , glGetTexParameterIuivEXT, GLGETTEXPARAMETERIUIVEXT, (GLenum target , GLenum pname , GLuint * params ), (target, pname, params)) \
	FUNC(void , glClearColorIiEXT, GLCLEARCOLORIIEXT, (GLint red , GLint green , GLint blue , GLint alpha ), (red, green, blue, alpha)) \
	FUNC(void , glClearColorIuiEXT, GLCLEARCOLORIUIEXT, (GLuint red , GLuint green , GLuint blue , GLuint alpha ), (red, green, blue, alpha)) \
	END()
#else
#define EXTENSION_GL_EXT_texture_integer(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_texture_lod_bias
#define GL_EXT_texture_lod_bias 1
#define EXTENSION_GL_EXT_texture_lod_bias(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_texture_lod_bias) \
	CONST(int, GL_MAX_TEXTURE_LOD_BIAS_EXT, 0x84FD) \
	CONST(int, GL_TEXTURE_FILTER_CONTROL_EXT, 0x8500) \
	CONST(int, GL_TEXTURE_LOD_BIAS_EXT, 0x8501) \
	END()
#else
#define EXTENSION_GL_EXT_texture_lod_bias(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_texture_mirror_clamp
#define GL_EXT_texture_mirror_clamp 1
#define EXTENSION_GL_EXT_texture_mirror_clamp(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_texture_mirror_clamp) \
	CONST(int, GL_MIRROR_CLAMP_EXT, 0x8742) \
	CONST(int, GL_MIRROR_CLAMP_TO_EDGE_EXT, 0x8743) \
	CONST(int, GL_MIRROR_CLAMP_TO_BORDER_EXT, 0x8912) \
	END()
#else
#define EXTENSION_GL_EXT_texture_mirror_clamp(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_texture_object
#define GL_EXT_texture_object 1
#define EXTENSION_GL_EXT_texture_object(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_texture_object) \
	CONST(int, GL_TEXTURE_PRIORITY_EXT, 0x8066) \
	CONST(int, GL_TEXTURE_RESIDENT_EXT, 0x8067) \
	CONST(int, GL_TEXTURE_1D_BINDING_EXT, 0x8068) \
	CONST(int, GL_TEXTURE_2D_BINDING_EXT, 0x8069) \
	CONST(int, GL_TEXTURE_3D_BINDING_EXT, 0x806A) \
	FUNC(GLboolean , glAreTexturesResidentEXT, GLARETEXTURESRESIDENTEXT, (GLsizei n , const GLuint * textures , GLboolean * residences ), (n, textures, residences)) \
	FUNC(void , glBindTextureEXT, GLBINDTEXTUREEXT, (GLenum target , GLuint texture ), (target, texture)) \
	FUNC(void , glDeleteTexturesEXT, GLDELETETEXTURESEXT, (GLsizei n , const GLuint * textures ), (n, textures)) \
	FUNC(void , glGenTexturesEXT, GLGENTEXTURESEXT, (GLsizei n , GLuint * textures ), (n, textures)) \
	FUNC(GLboolean , glIsTextureEXT, GLISTEXTUREEXT, (GLuint texture ), (texture)) \
	FUNC(void , glPrioritizeTexturesEXT, GLPRIORITIZETEXTURESEXT, (GLsizei n , const GLuint * textures , const GLclampf * priorities ), (n, textures, priorities)) \
	END()
#else
#define EXTENSION_GL_EXT_texture_object(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_texture_perturb_normal
#define GL_EXT_texture_perturb_normal 1
#define EXTENSION_GL_EXT_texture_perturb_normal(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_texture_perturb_normal) \
	CONST(int, GL_PERTURB_EXT, 0x85AE) \
	CONST(int, GL_TEXTURE_NORMAL_EXT, 0x85AF) \
	FUNC(void , glTextureNormalEXT, GLTEXTURENORMALEXT, (GLenum mode ), (mode)) \
	END()
#else
#define EXTENSION_GL_EXT_texture_perturb_normal(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_texture_sRGB
#define GL_EXT_texture_sRGB 1
#define EXTENSION_GL_EXT_texture_sRGB(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_texture_sRGB) \
	CONST(int, GL_SRGB_EXT, 0x8C40) \
	CONST(int, GL_SRGB8_EXT, 0x8C41) \
	CONST(int, GL_SRGB_ALPHA_EXT, 0x8C42) \
	CONST(int, GL_SRGB8_ALPHA8_EXT, 0x8C43) \
	CONST(int, GL_SLUMINANCE_ALPHA_EXT, 0x8C44) \
	CONST(int, GL_SLUMINANCE8_ALPHA8_EXT, 0x8C45) \
	CONST(int, GL_SLUMINANCE_EXT, 0x8C46) \
	CONST(int, GL_SLUMINANCE8_EXT, 0x8C47) \
	CONST(int, GL_COMPRESSED_SRGB_EXT, 0x8C48) \
	CONST(int, GL_COMPRESSED_SRGB_ALPHA_EXT, 0x8C49) \
	CONST(int, GL_COMPRESSED_SLUMINANCE_EXT, 0x8C4A) \
	CONST(int, GL_COMPRESSED_SLUMINANCE_ALPHA_EXT, 0x8C4B) \
	CONST(int, GL_COMPRESSED_SRGB_S3TC_DXT1_EXT, 0x8C4C) \
	CONST(int, GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT, 0x8C4D) \
	CONST(int, GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT, 0x8C4E) \
	CONST(int, GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT, 0x8C4F) \
	END()
#else
#define EXTENSION_GL_EXT_texture_sRGB(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_texture_sRGB_decode
#define GL_EXT_texture_sRGB_decode 1
#define EXTENSION_GL_EXT_texture_sRGB_decode(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_texture_sRGB_decode) \
	CONST(int, GL_TEXTURE_SRGB_DECODE_EXT, 0x8A48) \
	CONST(int, GL_DECODE_EXT, 0x8A49) \
	CONST(int, GL_SKIP_DECODE_EXT, 0x8A4A) \
	END()
#else
#define EXTENSION_GL_EXT_texture_sRGB_decode(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_texture_shared_exponent
#define GL_EXT_texture_shared_exponent 1
#define EXTENSION_GL_EXT_texture_shared_exponent(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_texture_shared_exponent) \
	CONST(int, GL_RGB9_E5_EXT, 0x8C3D) \
	CONST(int, GL_UNSIGNED_INT_5_9_9_9_REV_EXT, 0x8C3E) \
	CONST(int, GL_TEXTURE_SHARED_SIZE_EXT, 0x8C3F) \
	END()
#else
#define EXTENSION_GL_EXT_texture_shared_exponent(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_texture_snorm
#define GL_EXT_texture_snorm 1
#define EXTENSION_GL_EXT_texture_snorm(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_texture_snorm) \
	CONST(int, GL_ALPHA_SNORM, 0x9010) \
	CONST(int, GL_LUMINANCE_SNORM, 0x9011) \
	CONST(int, GL_LUMINANCE_ALPHA_SNORM, 0x9012) \
	CONST(int, GL_INTENSITY_SNORM, 0x9013) \
	CONST(int, GL_ALPHA8_SNORM, 0x9014) \
	CONST(int, GL_LUMINANCE8_SNORM, 0x9015) \
	CONST(int, GL_LUMINANCE8_ALPHA8_SNORM, 0x9016) \
	CONST(int, GL_INTENSITY8_SNORM, 0x9017) \
	CONST(int, GL_ALPHA16_SNORM, 0x9018) \
	CONST(int, GL_LUMINANCE16_SNORM, 0x9019) \
	CONST(int, GL_LUMINANCE16_ALPHA16_SNORM, 0x901A) \
	CONST(int, GL_INTENSITY16_SNORM, 0x901B) \
	END()
#else
#define EXTENSION_GL_EXT_texture_snorm(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_texture_swizzle
#define GL_EXT_texture_swizzle 1
#define EXTENSION_GL_EXT_texture_swizzle(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_texture_swizzle) \
	CONST(int, GL_TEXTURE_SWIZZLE_R_EXT, 0x8E42) \
	CONST(int, GL_TEXTURE_SWIZZLE_G_EXT, 0x8E43) \
	CONST(int, GL_TEXTURE_SWIZZLE_B_EXT, 0x8E44) \
	CONST(int, GL_TEXTURE_SWIZZLE_A_EXT, 0x8E45) \
	CONST(int, GL_TEXTURE_SWIZZLE_RGBA_EXT, 0x8E46) \
	END()
#else
#define EXTENSION_GL_EXT_texture_swizzle(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_timer_query
#define GL_EXT_timer_query 1
#define EXTENSION_GL_EXT_timer_query(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_timer_query) \
	CONST(int, GL_TIME_ELAPSED_EXT, 0x88BF) \
	FUNC(void , glGetQueryObjecti64vEXT, GLGETQUERYOBJECTI64VEXT, (GLuint id , GLenum pname , GLint64EXT * params ), (id, pname, params)) \
	FUNC(void , glGetQueryObjectui64vEXT, GLGETQUERYOBJECTUI64VEXT, (GLuint id , GLenum pname , GLuint64EXT * params ), (id, pname, params)) \
	END()
#else
#define EXTENSION_GL_EXT_timer_query(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_transform_feedback
#define GL_EXT_transform_feedback 1
#define EXTENSION_GL_EXT_transform_feedback(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_transform_feedback) \
	CONST(int, GL_TRANSFORM_FEEDBACK_BUFFER_EXT, 0x8C8E) \
	CONST(int, GL_TRANSFORM_FEEDBACK_BUFFER_START_EXT, 0x8C84) \
	CONST(int, GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT, 0x8C85) \
	CONST(int, GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT, 0x8C8F) \
	CONST(int, GL_INTERLEAVED_ATTRIBS_EXT, 0x8C8C) \
	CONST(int, GL_SEPARATE_ATTRIBS_EXT, 0x8C8D) \
	CONST(int, GL_PRIMITIVES_GENERATED_EXT, 0x8C87) \
	CONST(int, GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT, 0x8C88) \
	CONST(int, GL_RASTERIZER_DISCARD_EXT, 0x8C89) \
	CONST(int, GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT, 0x8C8A) \
	CONST(int, GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT, 0x8C8B) \
	CONST(int, GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT, 0x8C80) \
	CONST(int, GL_TRANSFORM_FEEDBACK_VARYINGS_EXT, 0x8C83) \
	CONST(int, GL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT, 0x8C7F) \
	CONST(int, GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT, 0x8C76) \
	FUNC(void , glBeginTransformFeedbackEXT, GLBEGINTRANSFORMFEEDBACKEXT, (GLenum primitiveMode ), (primitiveMode)) \
	FUNC(void , glEndTransformFeedbackEXT, GLENDTRANSFORMFEEDBACKEXT, (void ), ()) \
	FUNC(void , glBindBufferRangeEXT, GLBINDBUFFERRANGEEXT, (GLenum target , GLuint index , GLuint buffer , GLintptr offset , GLsizeiptr size ), (target, index, buffer, offset, size)) \
	FUNC(void , glBindBufferOffsetEXT, GLBINDBUFFEROFFSETEXT, (GLenum target , GLuint index , GLuint buffer , GLintptr offset ), (target, index, buffer, offset)) \
	FUNC(void , glBindBufferBaseEXT, GLBINDBUFFERBASEEXT, (GLenum target , GLuint index , GLuint buffer ), (target, index, buffer)) \
	FUNC(void , glTransformFeedbackVaryingsEXT, GLTRANSFORMFEEDBACKVARYINGSEXT, (GLuint program , GLsizei count , const GLchar * * varyings , GLenum bufferMode ), (program, count, varyings, bufferMode)) \
	FUNC(void , glGetTransformFeedbackVaryingEXT, GLGETTRANSFORMFEEDBACKVARYINGEXT, (GLuint program , GLuint index , GLsizei bufSize , GLsizei * length , GLsizei * size , GLenum * type , GLchar * name ), (program, index, bufSize, length, size, type, name)) \
	END()
#else
#define EXTENSION_GL_EXT_transform_feedback(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_vertex_array
#define GL_EXT_vertex_array 1
#define EXTENSION_GL_EXT_vertex_array(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_vertex_array) \
	CONST(int, GL_VERTEX_ARRAY_EXT, 0x8074) \
	CONST(int, GL_NORMAL_ARRAY_EXT, 0x8075) \
	CONST(int, GL_COLOR_ARRAY_EXT, 0x8076) \
	CONST(int, GL_INDEX_ARRAY_EXT, 0x8077) \
	CONST(int, GL_TEXTURE_COORD_ARRAY_EXT, 0x8078) \
	CONST(int, GL_EDGE_FLAG_ARRAY_EXT, 0x8079) \
	CONST(int, GL_VERTEX_ARRAY_SIZE_EXT, 0x807A) \
	CONST(int, GL_VERTEX_ARRAY_TYPE_EXT, 0x807B) \
	CONST(int, GL_VERTEX_ARRAY_STRIDE_EXT, 0x807C) \
	CONST(int, GL_VERTEX_ARRAY_COUNT_EXT, 0x807D) \
	CONST(int, GL_NORMAL_ARRAY_TYPE_EXT, 0x807E) \
	CONST(int, GL_NORMAL_ARRAY_STRIDE_EXT, 0x807F) \
	CONST(int, GL_NORMAL_ARRAY_COUNT_EXT, 0x8080) \
	CONST(int, GL_COLOR_ARRAY_SIZE_EXT, 0x8081) \
	CONST(int, GL_COLOR_ARRAY_TYPE_EXT, 0x8082) \
	CONST(int, GL_COLOR_ARRAY_STRIDE_EXT, 0x8083) \
	CONST(int, GL_COLOR_ARRAY_COUNT_EXT, 0x8084) \
	CONST(int, GL_INDEX_ARRAY_TYPE_EXT, 0x8085) \
	CONST(int, GL_INDEX_ARRAY_STRIDE_EXT, 0x8086) \
	CONST(int, GL_INDEX_ARRAY_COUNT_EXT, 0x8087) \
	CONST(int, GL_TEXTURE_COORD_ARRAY_SIZE_EXT, 0x8088) \
	CONST(int, GL_TEXTURE_COORD_ARRAY_TYPE_EXT, 0x8089) \
	CONST(int, GL_TEXTURE_COORD_ARRAY_STRIDE_EXT, 0x808A) \
	CONST(int, GL_TEXTURE_COORD_ARRAY_COUNT_EXT, 0x808B) \
	CONST(int, GL_EDGE_FLAG_ARRAY_STRIDE_EXT, 0x808C) \
	CONST(int, GL_EDGE_FLAG_ARRAY_COUNT_EXT, 0x808D) \
	CONST(int, GL_VERTEX_ARRAY_POINTER_EXT, 0x808E) \
	CONST(int, GL_NORMAL_ARRAY_POINTER_EXT, 0x808F) \
	CONST(int, GL_COLOR_ARRAY_POINTER_EXT, 0x8090) \
	CONST(int, GL_INDEX_ARRAY_POINTER_EXT, 0x8091) \
	CONST(int, GL_TEXTURE_COORD_ARRAY_POINTER_EXT, 0x8092) \
	CONST(int, GL_EDGE_FLAG_ARRAY_POINTER_EXT, 0x8093) \
	FUNC(void , glArrayElementEXT, GLARRAYELEMENTEXT, (GLint i ), (i)) \
	FUNC(void , glColorPointerEXT, GLCOLORPOINTEREXT, (GLint size , GLenum type , GLsizei stride , GLsizei count , const GLvoid * pointer ), (size, type, stride, count, pointer)) \
	FUNC(void , glDrawArraysEXT, GLDRAWARRAYSEXT, (GLenum mode , GLint first , GLsizei count ), (mode, first, count)) \
	FUNC(void , glEdgeFlagPointerEXT, GLEDGEFLAGPOINTEREXT, (GLsizei stride , GLsizei count , const GLboolean * pointer ), (stride, count, pointer)) \
	FUNC(void , glGetPointervEXT, GLGETPOINTERVEXT, (GLenum pname , GLvoid * * params ), (pname, params)) \
	FUNC(void , glIndexPointerEXT, GLINDEXPOINTEREXT, (GLenum type , GLsizei stride , GLsizei count , const GLvoid * pointer ), (type, stride, count, pointer)) \
	FUNC(void , glNormalPointerEXT, GLNORMALPOINTEREXT, (GLenum type , GLsizei stride , GLsizei count , const GLvoid * pointer ), (type, stride, count, pointer)) \
	FUNC(void , glTexCoordPointerEXT, GLTEXCOORDPOINTEREXT, (GLint size , GLenum type , GLsizei stride , GLsizei count , const GLvoid * pointer ), (size, type, stride, count, pointer)) \
	FUNC(void , glVertexPointerEXT, GLVERTEXPOINTEREXT, (GLint size , GLenum type , GLsizei stride , GLsizei count , const GLvoid * pointer ), (size, type, stride, count, pointer)) \
	END()
#else
#define EXTENSION_GL_EXT_vertex_array(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_vertex_array_bgra
#define GL_EXT_vertex_array_bgra 1
#define EXTENSION_GL_EXT_vertex_array_bgra(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_vertex_array_bgra) \
	END()
#else
#define EXTENSION_GL_EXT_vertex_array_bgra(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_vertex_attrib_64bit
#define GL_EXT_vertex_attrib_64bit 1
#define EXTENSION_GL_EXT_vertex_attrib_64bit(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_vertex_attrib_64bit) \
	CONST(int, GL_DOUBLE_VEC2_EXT, 0x8FFC) \
	CONST(int, GL_DOUBLE_VEC3_EXT, 0x8FFD) \
	CONST(int, GL_DOUBLE_VEC4_EXT, 0x8FFE) \
	CONST(int, GL_DOUBLE_MAT2_EXT, 0x8F46) \
	CONST(int, GL_DOUBLE_MAT3_EXT, 0x8F47) \
	CONST(int, GL_DOUBLE_MAT4_EXT, 0x8F48) \
	CONST(int, GL_DOUBLE_MAT2x3_EXT, 0x8F49) \
	CONST(int, GL_DOUBLE_MAT2x4_EXT, 0x8F4A) \
	CONST(int, GL_DOUBLE_MAT3x2_EXT, 0x8F4B) \
	CONST(int, GL_DOUBLE_MAT3x4_EXT, 0x8F4C) \
	CONST(int, GL_DOUBLE_MAT4x2_EXT, 0x8F4D) \
	CONST(int, GL_DOUBLE_MAT4x3_EXT, 0x8F4E) \
	FUNC(void , glVertexAttribL1dEXT, GLVERTEXATTRIBL1DEXT, (GLuint index , GLdouble x ), (index, x)) \
	FUNC(void , glVertexAttribL2dEXT, GLVERTEXATTRIBL2DEXT, (GLuint index , GLdouble x , GLdouble y ), (index, x, y)) \
	FUNC(void , glVertexAttribL3dEXT, GLVERTEXATTRIBL3DEXT, (GLuint index , GLdouble x , GLdouble y , GLdouble z ), (index, x, y, z)) \
	FUNC(void , glVertexAttribL4dEXT, GLVERTEXATTRIBL4DEXT, (GLuint index , GLdouble x , GLdouble y , GLdouble z , GLdouble w ), (index, x, y, z, w)) \
	FUNC(void , glVertexAttribL1dvEXT, GLVERTEXATTRIBL1DVEXT, (GLuint index , const GLdouble * v ), (index, v)) \
	FUNC(void , glVertexAttribL2dvEXT, GLVERTEXATTRIBL2DVEXT, (GLuint index , const GLdouble * v ), (index, v)) \
	FUNC(void , glVertexAttribL3dvEXT, GLVERTEXATTRIBL3DVEXT, (GLuint index , const GLdouble * v ), (index, v)) \
	FUNC(void , glVertexAttribL4dvEXT, GLVERTEXATTRIBL4DVEXT, (GLuint index , const GLdouble * v ), (index, v)) \
	FUNC(void , glVertexAttribLPointerEXT, GLVERTEXATTRIBLPOINTEREXT, (GLuint index , GLint size , GLenum type , GLsizei stride , const GLvoid * pointer ), (index, size, type, stride, pointer)) \
	FUNC(void , glGetVertexAttribLdvEXT, GLGETVERTEXATTRIBLDVEXT, (GLuint index , GLenum pname , GLdouble * params ), (index, pname, params)) \
	FUNC(void , glVertexArrayVertexAttribLOffsetEXT, GLVERTEXARRAYVERTEXATTRIBLOFFSETEXT, (GLuint vaobj , GLuint buffer , GLuint index , GLint size , GLenum type , GLsizei stride , GLintptr offset ), (vaobj, buffer, index, size, type, stride, offset)) \
	END()
#else
#define EXTENSION_GL_EXT_vertex_attrib_64bit(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_vertex_shader
#define GL_EXT_vertex_shader 1
#define EXTENSION_GL_EXT_vertex_shader(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_vertex_shader) \
	CONST(int, GL_VERTEX_SHADER_EXT, 0x8780) \
	CONST(int, GL_VERTEX_SHADER_BINDING_EXT, 0x8781) \
	CONST(int, GL_OP_INDEX_EXT, 0x8782) \
	CONST(int, GL_OP_NEGATE_EXT, 0x8783) \
	CONST(int, GL_OP_DOT3_EXT, 0x8784) \
	CONST(int, GL_OP_DOT4_EXT, 0x8785) \
	CONST(int, GL_OP_MUL_EXT, 0x8786) \
	CONST(int, GL_OP_ADD_EXT, 0x8787) \
	CONST(int, GL_OP_MADD_EXT, 0x8788) \
	CONST(int, GL_OP_FRAC_EXT, 0x8789) \
	CONST(int, GL_OP_MAX_EXT, 0x878A) \
	CONST(int, GL_OP_MIN_EXT, 0x878B) \
	CONST(int, GL_OP_SET_GE_EXT, 0x878C) \
	CONST(int, GL_OP_SET_LT_EXT, 0x878D) \
	CONST(int, GL_OP_CLAMP_EXT, 0x878E) \
	CONST(int, GL_OP_FLOOR_EXT, 0x878F) \
	CONST(int, GL_OP_ROUND_EXT, 0x8790) \
	CONST(int, GL_OP_EXP_BASE_2_EXT, 0x8791) \
	CONST(int, GL_OP_LOG_BASE_2_EXT, 0x8792) \
	CONST(int, GL_OP_POWER_EXT, 0x8793) \
	CONST(int, GL_OP_RECIP_EXT, 0x8794) \
	CONST(int, GL_OP_RECIP_SQRT_EXT, 0x8795) \
	CONST(int, GL_OP_SUB_EXT, 0x8796) \
	CONST(int, GL_OP_CROSS_PRODUCT_EXT, 0x8797) \
	CONST(int, GL_OP_MULTIPLY_MATRIX_EXT, 0x8798) \
	CONST(int, GL_OP_MOV_EXT, 0x8799) \
	CONST(int, GL_OUTPUT_VERTEX_EXT, 0x879A) \
	CONST(int, GL_OUTPUT_COLOR0_EXT, 0x879B) \
	CONST(int, GL_OUTPUT_COLOR1_EXT, 0x879C) \
	CONST(int, GL_OUTPUT_TEXTURE_COORD0_EXT, 0x879D) \
	CONST(int, GL_OUTPUT_TEXTURE_COORD1_EXT, 0x879E) \
	CONST(int, GL_OUTPUT_TEXTURE_COORD2_EXT, 0x879F) \
	CONST(int, GL_OUTPUT_TEXTURE_COORD3_EXT, 0x87A0) \
	CONST(int, GL_OUTPUT_TEXTURE_COORD4_EXT, 0x87A1) \
	CONST(int, GL_OUTPUT_TEXTURE_COORD5_EXT, 0x87A2) \
	CONST(int, GL_OUTPUT_TEXTURE_COORD6_EXT, 0x87A3) \
	CONST(int, GL_OUTPUT_TEXTURE_COORD7_EXT, 0x87A4) \
	CONST(int, GL_OUTPUT_TEXTURE_COORD8_EXT, 0x87A5) \
	CONST(int, GL_OUTPUT_TEXTURE_COORD9_EXT, 0x87A6) \
	CONST(int, GL_OUTPUT_TEXTURE_COORD10_EXT, 0x87A7) \
	CONST(int, GL_OUTPUT_TEXTURE_COORD11_EXT, 0x87A8) \
	CONST(int, GL_OUTPUT_TEXTURE_COORD12_EXT, 0x87A9) \
	CONST(int, GL_OUTPUT_TEXTURE_COORD13_EXT, 0x87AA) \
	CONST(int, GL_OUTPUT_TEXTURE_COORD14_EXT, 0x87AB) \
	CONST(int, GL_OUTPUT_TEXTURE_COORD15_EXT, 0x87AC) \
	CONST(int, GL_OUTPUT_TEXTURE_COORD16_EXT, 0x87AD) \
	CONST(int, GL_OUTPUT_TEXTURE_COORD17_EXT, 0x87AE) \
	CONST(int, GL_OUTPUT_TEXTURE_COORD18_EXT, 0x87AF) \
	CONST(int, GL_OUTPUT_TEXTURE_COORD19_EXT, 0x87B0) \
	CONST(int, GL_OUTPUT_TEXTURE_COORD20_EXT, 0x87B1) \
	CONST(int, GL_OUTPUT_TEXTURE_COORD21_EXT, 0x87B2) \
	CONST(int, GL_OUTPUT_TEXTURE_COORD22_EXT, 0x87B3) \
	CONST(int, GL_OUTPUT_TEXTURE_COORD23_EXT, 0x87B4) \
	CONST(int, GL_OUTPUT_TEXTURE_COORD24_EXT, 0x87B5) \
	CONST(int, GL_OUTPUT_TEXTURE_COORD25_EXT, 0x87B6) \
	CONST(int, GL_OUTPUT_TEXTURE_COORD26_EXT, 0x87B7) \
	CONST(int, GL_OUTPUT_TEXTURE_COORD27_EXT, 0x87B8) \
	CONST(int, GL_OUTPUT_TEXTURE_COORD28_EXT, 0x87B9) \
	CONST(int, GL_OUTPUT_TEXTURE_COORD29_EXT, 0x87BA) \
	CONST(int, GL_OUTPUT_TEXTURE_COORD30_EXT, 0x87BB) \
	CONST(int, GL_OUTPUT_TEXTURE_COORD31_EXT, 0x87BC) \
	CONST(int, GL_OUTPUT_FOG_EXT, 0x87BD) \
	CONST(int, GL_SCALAR_EXT, 0x87BE) \
	CONST(int, GL_VECTOR_EXT, 0x87BF) \
	CONST(int, GL_MATRIX_EXT, 0x87C0) \
	CONST(int, GL_VARIANT_EXT, 0x87C1) \
	CONST(int, GL_INVARIANT_EXT, 0x87C2) \
	CONST(int, GL_LOCAL_CONSTANT_EXT, 0x87C3) \
	CONST(int, GL_LOCAL_EXT, 0x87C4) \
	CONST(int, GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT, 0x87C5) \
	CONST(int, GL_MAX_VERTEX_SHADER_VARIANTS_EXT, 0x87C6) \
	CONST(int, GL_MAX_VERTEX_SHADER_INVARIANTS_EXT, 0x87C7) \
	CONST(int, GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT, 0x87C8) \
	CONST(int, GL_MAX_VERTEX_SHADER_LOCALS_EXT, 0x87C9) \
	CONST(int, GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT, 0x87CA) \
	CONST(int, GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT, 0x87CB) \
	CONST(int, GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT, 0x87CC) \
	CONST(int, GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT, 0x87CD) \
	CONST(int, GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT, 0x87CE) \
	CONST(int, GL_VERTEX_SHADER_INSTRUCTIONS_EXT, 0x87CF) \
	CONST(int, GL_VERTEX_SHADER_VARIANTS_EXT, 0x87D0) \
	CONST(int, GL_VERTEX_SHADER_INVARIANTS_EXT, 0x87D1) \
	CONST(int, GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT, 0x87D2) \
	CONST(int, GL_VERTEX_SHADER_LOCALS_EXT, 0x87D3) \
	CONST(int, GL_VERTEX_SHADER_OPTIMIZED_EXT, 0x87D4) \
	CONST(int, GL_X_EXT, 0x87D5) \
	CONST(int, GL_Y_EXT, 0x87D6) \
	CONST(int, GL_Z_EXT, 0x87D7) \
	CONST(int, GL_W_EXT, 0x87D8) \
	CONST(int, GL_NEGATIVE_X_EXT, 0x87D9) \
	CONST(int, GL_NEGATIVE_Y_EXT, 0x87DA) \
	CONST(int, GL_NEGATIVE_Z_EXT, 0x87DB) \
	CONST(int, GL_NEGATIVE_W_EXT, 0x87DC) \
	CONST(int, GL_ZERO_EXT, 0x87DD) \
	CONST(int, GL_ONE_EXT, 0x87DE) \
	CONST(int, GL_NEGATIVE_ONE_EXT, 0x87DF) \
	CONST(int, GL_NORMALIZED_RANGE_EXT, 0x87E0) \
	CONST(int, GL_FULL_RANGE_EXT, 0x87E1) \
	CONST(int, GL_CURRENT_VERTEX_EXT, 0x87E2) \
	CONST(int, GL_MVP_MATRIX_EXT, 0x87E3) \
	CONST(int, GL_VARIANT_VALUE_EXT, 0x87E4) \
	CONST(int, GL_VARIANT_DATATYPE_EXT, 0x87E5) \
	CONST(int, GL_VARIANT_ARRAY_STRIDE_EXT, 0x87E6) \
	CONST(int, GL_VARIANT_ARRAY_TYPE_EXT, 0x87E7) \
	CONST(int, GL_VARIANT_ARRAY_EXT, 0x87E8) \
	CONST(int, GL_VARIANT_ARRAY_POINTER_EXT, 0x87E9) \
	CONST(int, GL_INVARIANT_VALUE_EXT, 0x87EA) \
	CONST(int, GL_INVARIANT_DATATYPE_EXT, 0x87EB) \
	CONST(int, GL_LOCAL_CONSTANT_VALUE_EXT, 0x87EC) \
	CONST(int, GL_LOCAL_CONSTANT_DATATYPE_EXT, 0x87ED) \
	FUNC(void , glBeginVertexShaderEXT, GLBEGINVERTEXSHADEREXT, (void ), ()) \
	FUNC(void , glEndVertexShaderEXT, GLENDVERTEXSHADEREXT, (void ), ()) \
	FUNC(void , glBindVertexShaderEXT, GLBINDVERTEXSHADEREXT, (GLuint id ), (id)) \
	FUNC(GLuint , glGenVertexShadersEXT, GLGENVERTEXSHADERSEXT, (GLuint range ), (range)) \
	FUNC(void , glDeleteVertexShaderEXT, GLDELETEVERTEXSHADEREXT, (GLuint id ), (id)) \
	FUNC(void , glShaderOp1EXT, GLSHADEROP1EXT, (GLenum op , GLuint res , GLuint arg1 ), (op, res, arg1)) \
	FUNC(void , glShaderOp2EXT, GLSHADEROP2EXT, (GLenum op , GLuint res , GLuint arg1 , GLuint arg2 ), (op, res, arg1, arg2)) \
	FUNC(void , glShaderOp3EXT, GLSHADEROP3EXT, (GLenum op , GLuint res , GLuint arg1 , GLuint arg2 , GLuint arg3 ), (op, res, arg1, arg2, arg3)) \
	FUNC(void , glSwizzleEXT, GLSWIZZLEEXT, (GLuint res , GLuint in , GLenum outX , GLenum outY , GLenum outZ , GLenum outW ), (res, in, outX, outY, outZ, outW)) \
	FUNC(void , glWriteMaskEXT, GLWRITEMASKEXT, (GLuint res , GLuint in , GLenum outX , GLenum outY , GLenum outZ , GLenum outW ), (res, in, outX, outY, outZ, outW)) \
	FUNC(void , glInsertComponentEXT, GLINSERTCOMPONENTEXT, (GLuint res , GLuint src , GLuint num ), (res, src, num)) \
	FUNC(void , glExtractComponentEXT, GLEXTRACTCOMPONENTEXT, (GLuint res , GLuint src , GLuint num ), (res, src, num)) \
	FUNC(GLuint , glGenSymbolsEXT, GLGENSYMBOLSEXT, (GLenum datatype , GLenum storagetype , GLenum range , GLuint components ), (datatype, storagetype, range, components)) \
	FUNC(void , glSetInvariantEXT, GLSETINVARIANTEXT, (GLuint id , GLenum type , const GLvoid * addr ), (id, type, addr)) \
	FUNC(void , glSetLocalConstantEXT, GLSETLOCALCONSTANTEXT, (GLuint id , GLenum type , const GLvoid * addr ), (id, type, addr)) \
	FUNC(void , glVariantbvEXT, GLVARIANTBVEXT, (GLuint id , const GLbyte * addr ), (id, addr)) \
	FUNC(void , glVariantsvEXT, GLVARIANTSVEXT, (GLuint id , const GLshort * addr ), (id, addr)) \
	FUNC(void , glVariantivEXT, GLVARIANTIVEXT, (GLuint id , const GLint * addr ), (id, addr)) \
	FUNC(void , glVariantfvEXT, GLVARIANTFVEXT, (GLuint id , const GLfloat * addr ), (id, addr)) \
	FUNC(void , glVariantdvEXT, GLVARIANTDVEXT, (GLuint id , const GLdouble * addr ), (id, addr)) \
	FUNC(void , glVariantubvEXT, GLVARIANTUBVEXT, (GLuint id , const GLubyte * addr ), (id, addr)) \
	FUNC(void , glVariantusvEXT, GLVARIANTUSVEXT, (GLuint id , const GLushort * addr ), (id, addr)) \
	FUNC(void , glVariantuivEXT, GLVARIANTUIVEXT, (GLuint id , const GLuint * addr ), (id, addr)) \
	FUNC(void , glVariantPointerEXT, GLVARIANTPOINTEREXT, (GLuint id , GLenum type , GLuint stride , const GLvoid * addr ), (id, type, stride, addr)) \
	FUNC(void , glEnableVariantClientStateEXT, GLENABLEVARIANTCLIENTSTATEEXT, (GLuint id ), (id)) \
	FUNC(void , glDisableVariantClientStateEXT, GLDISABLEVARIANTCLIENTSTATEEXT, (GLuint id ), (id)) \
	FUNC(GLuint , glBindLightParameterEXT, GLBINDLIGHTPARAMETEREXT, (GLenum light , GLenum value ), (light, value)) \
	FUNC(GLuint , glBindMaterialParameterEXT, GLBINDMATERIALPARAMETEREXT, (GLenum face , GLenum value ), (face, value)) \
	FUNC(GLuint , glBindTexGenParameterEXT, GLBINDTEXGENPARAMETEREXT, (GLenum unit , GLenum coord , GLenum value ), (unit, coord, value)) \
	FUNC(GLuint , glBindTextureUnitParameterEXT, GLBINDTEXTUREUNITPARAMETEREXT, (GLenum unit , GLenum value ), (unit, value)) \
	FUNC(GLuint , glBindParameterEXT, GLBINDPARAMETEREXT, (GLenum value ), (value)) \
	FUNC(GLboolean , glIsVariantEnabledEXT, GLISVARIANTENABLEDEXT, (GLuint id , GLenum cap ), (id, cap)) \
	FUNC(void , glGetVariantBooleanvEXT, GLGETVARIANTBOOLEANVEXT, (GLuint id , GLenum value , GLboolean * data ), (id, value, data)) \
	FUNC(void , glGetVariantIntegervEXT, GLGETVARIANTINTEGERVEXT, (GLuint id , GLenum value , GLint * data ), (id, value, data)) \
	FUNC(void , glGetVariantFloatvEXT, GLGETVARIANTFLOATVEXT, (GLuint id , GLenum value , GLfloat * data ), (id, value, data)) \
	FUNC(void , glGetVariantPointervEXT, GLGETVARIANTPOINTERVEXT, (GLuint id , GLenum value , GLvoid * * data ), (id, value, data)) \
	FUNC(void , glGetInvariantBooleanvEXT, GLGETINVARIANTBOOLEANVEXT, (GLuint id , GLenum value , GLboolean * data ), (id, value, data)) \
	FUNC(void , glGetInvariantIntegervEXT, GLGETINVARIANTINTEGERVEXT, (GLuint id , GLenum value , GLint * data ), (id, value, data)) \
	FUNC(void , glGetInvariantFloatvEXT, GLGETINVARIANTFLOATVEXT, (GLuint id , GLenum value , GLfloat * data ), (id, value, data)) \
	FUNC(void , glGetLocalConstantBooleanvEXT, GLGETLOCALCONSTANTBOOLEANVEXT, (GLuint id , GLenum value , GLboolean * data ), (id, value, data)) \
	FUNC(void , glGetLocalConstantIntegervEXT, GLGETLOCALCONSTANTINTEGERVEXT, (GLuint id , GLenum value , GLint * data ), (id, value, data)) \
	FUNC(void , glGetLocalConstantFloatvEXT, GLGETLOCALCONSTANTFLOATVEXT, (GLuint id , GLenum value , GLfloat * data ), (id, value, data)) \
	END()
#else
#define EXTENSION_GL_EXT_vertex_shader(NAME, FUNC, CONST, END)
#endif

#ifndef GL_EXT_vertex_weighting
#define GL_EXT_vertex_weighting 1
#define EXTENSION_GL_EXT_vertex_weighting(NAME, FUNC, CONST, END) \
	NAME(GL_EXT_vertex_weighting) \
	CONST(int, GL_MODELVIEW0_STACK_DEPTH_EXT, GL_MODELVIEW_STACK_DEPTH) \
	CONST(int, GL_MODELVIEW1_STACK_DEPTH_EXT, 0x8502) \
	CONST(int, GL_MODELVIEW0_MATRIX_EXT, GL_MODELVIEW_MATRIX) \
	CONST(int, GL_MODELVIEW1_MATRIX_EXT, 0x8506) \
	CONST(int, GL_VERTEX_WEIGHTING_EXT, 0x8509) \
	CONST(int, GL_MODELVIEW0_EXT, GL_MODELVIEW) \
	CONST(int, GL_MODELVIEW1_EXT, 0x850A) \
	CONST(int, GL_CURRENT_VERTEX_WEIGHT_EXT, 0x850B) \
	CONST(int, GL_VERTEX_WEIGHT_ARRAY_EXT, 0x850C) \
	CONST(int, GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT, 0x850D) \
	CONST(int, GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT, 0x850E) \
	CONST(int, GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT, 0x850F) \
	CONST(int, GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT, 0x8510) \
	FUNC(void , glVertexWeightfEXT, GLVERTEXWEIGHTFEXT, (GLfloat weight ), (weight)) \
	FUNC(void , glVertexWeightfvEXT, GLVERTEXWEIGHTFVEXT, (const GLfloat * weight ), (weight)) \
	FUNC(void , glVertexWeightPointerEXT, GLVERTEXWEIGHTPOINTEREXT, (GLsizei size , GLenum type , GLsizei stride , const GLvoid * pointer ), (size, type, stride, pointer)) \
	END()
#else
#define EXTENSION_GL_EXT_vertex_weighting(NAME, FUNC, CONST, END)
#endif

#ifndef GL_FfdMaskSGIX
#define GL_FfdMaskSGIX 1
#define EXTENSION_GL_FfdMaskSGIX(NAME, FUNC, CONST, END) \
	NAME(GL_FfdMaskSGIX) \
	CONST(int, GL_TEXTURE_DEFORMATION_BIT_SGIX, 0x00000001) \
	CONST(int, GL_GEOMETRY_DEFORMATION_BIT_SGIX, 0x00000002) \
	END()
#else
#define EXTENSION_GL_FfdMaskSGIX(NAME, FUNC, CONST, END)
#endif

#ifndef GL_GREMEDY_frame_terminator
#define GL_GREMEDY_frame_terminator 1
#define EXTENSION_GL_GREMEDY_frame_terminator(NAME, FUNC, CONST, END) \
	NAME(GL_GREMEDY_frame_terminator) \
	FUNC(void , glFrameTerminatorGREMEDY, GLFRAMETERMINATORGREMEDY, (void ), ()) \
	END()
#else
#define EXTENSION_GL_GREMEDY_frame_terminator(NAME, FUNC, CONST, END)
#endif

#ifndef GL_GREMEDY_string_marker
#define GL_GREMEDY_string_marker 1
#define EXTENSION_GL_GREMEDY_string_marker(NAME, FUNC, CONST, END) \
	NAME(GL_GREMEDY_string_marker) \
	FUNC(void , glStringMarkerGREMEDY, GLSTRINGMARKERGREMEDY, (GLsizei len , const GLvoid * string ), (len, string)) \
	END()
#else
#define EXTENSION_GL_GREMEDY_string_marker(NAME, FUNC, CONST, END)
#endif

#ifndef GL_HP_convolution_border_modes
#define GL_HP_convolution_border_modes 1
#define EXTENSION_GL_HP_convolution_border_modes(NAME, FUNC, CONST, END) \
	NAME(GL_HP_convolution_border_modes) \
	CONST(int, GL_IGNORE_BORDER_HP, 0x8150) \
	CONST(int, GL_CONSTANT_BORDER_HP, 0x8151) \
	CONST(int, GL_REPLICATE_BORDER_HP, 0x8153) \
	CONST(int, GL_CONVOLUTION_BORDER_COLOR_HP, 0x8154) \
	END()
#else
#define EXTENSION_GL_HP_convolution_border_modes(NAME, FUNC, CONST, END)
#endif

#ifndef GL_HP_image_transform
#define GL_HP_image_transform 1
#define EXTENSION_GL_HP_image_transform(NAME, FUNC, CONST, END) \
	NAME(GL_HP_image_transform) \
	CONST(int, GL_IMAGE_SCALE_X_HP, 0x8155) \
	CONST(int, GL_IMAGE_SCALE_Y_HP, 0x8156) \
	CONST(int, GL_IMAGE_TRANSLATE_X_HP, 0x8157) \
	CONST(int, GL_IMAGE_TRANSLATE_Y_HP, 0x8158) \
	CONST(int, GL_IMAGE_ROTATE_ANGLE_HP, 0x8159) \
	CONST(int, GL_IMAGE_ROTATE_ORIGIN_X_HP, 0x815A) \
	CONST(int, GL_IMAGE_ROTATE_ORIGIN_Y_HP, 0x815B) \
	CONST(int, GL_IMAGE_MAG_FILTER_HP, 0x815C) \
	CONST(int, GL_IMAGE_MIN_FILTER_HP, 0x815D) \
	CONST(int, GL_IMAGE_CUBIC_WEIGHT_HP, 0x815E) \
	CONST(int, GL_CUBIC_HP, 0x815F) \
	CONST(int, GL_AVERAGE_HP, 0x8160) \
	CONST(int, GL_IMAGE_TRANSFORM_2D_HP, 0x8161) \
	CONST(int, GL_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP, 0x8162) \
	CONST(int, GL_PROXY_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP, 0x8163) \
	FUNC(void , glImageTransformParameteriHP, GLIMAGETRANSFORMPARAMETERIHP, (GLenum target , GLenum pname , GLint param ), (target, pname, param)) \
	FUNC(void , glImageTransformParameterfHP, GLIMAGETRANSFORMPARAMETERFHP, (GLenum target , GLenum pname , GLfloat param ), (target, pname, param)) \
	FUNC(void , glImageTransformParameterivHP, GLIMAGETRANSFORMPARAMETERIVHP, (GLenum target , GLenum pname , const GLint * params ), (target, pname, params)) \
	FUNC(void , glImageTransformParameterfvHP, GLIMAGETRANSFORMPARAMETERFVHP, (GLenum target , GLenum pname , const GLfloat * params ), (target, pname, params)) \
	FUNC(void , glGetImageTransformParameterivHP, GLGETIMAGETRANSFORMPARAMETERIVHP, (GLenum target , GLenum pname , GLint * params ), (target, pname, params)) \
	FUNC(void , glGetImageTransformParameterfvHP, GLGETIMAGETRANSFORMPARAMETERFVHP, (GLenum target , GLenum pname , GLfloat * params ), (target, pname, params)) \
	END()
#else
#define EXTENSION_GL_HP_image_transform(NAME, FUNC, CONST, END)
#endif

#ifndef GL_HP_occlusion_test
#define GL_HP_occlusion_test 1
#define EXTENSION_GL_HP_occlusion_test(NAME, FUNC, CONST, END) \
	NAME(GL_HP_occlusion_test) \
	CONST(int, GL_OCCLUSION_TEST_HP, 0x8165) \
	CONST(int, GL_OCCLUSION_TEST_RESULT_HP, 0x8166) \
	END()
#else
#define EXTENSION_GL_HP_occlusion_test(NAME, FUNC, CONST, END)
#endif

#ifndef GL_HP_texture_lighting
#define GL_HP_texture_lighting 1
#define EXTENSION_GL_HP_texture_lighting(NAME, FUNC, CONST, END) \
	NAME(GL_HP_texture_lighting) \
	CONST(int, GL_TEXTURE_LIGHTING_MODE_HP, 0x8167) \
	CONST(int, GL_TEXTURE_POST_SPECULAR_HP, 0x8168) \
	CONST(int, GL_TEXTURE_PRE_SPECULAR_HP, 0x8169) \
	END()
#else
#define EXTENSION_GL_HP_texture_lighting(NAME, FUNC, CONST, END)
#endif

#ifndef GL_IBM_cull_vertex
#define GL_IBM_cull_vertex 1
#define EXTENSION_GL_IBM_cull_vertex(NAME, FUNC, CONST, END) \
	NAME(GL_IBM_cull_vertex) \
	CONST(int, GL_CULL_VERTEX_IBM, 103050) \
	END()
#else
#define EXTENSION_GL_IBM_cull_vertex(NAME, FUNC, CONST, END)
#endif

#ifndef GL_IBM_multimode_draw_arrays
#define GL_IBM_multimode_draw_arrays 1
#define EXTENSION_GL_IBM_multimode_draw_arrays(NAME, FUNC, CONST, END) \
	NAME(GL_IBM_multimode_draw_arrays) \
	FUNC(void , glMultiModeDrawArraysIBM, GLMULTIMODEDRAWARRAYSIBM, (const GLenum * mode , const GLint * first , const GLsizei * count , GLsizei primcount , GLint modestride ), (mode, first, count, primcount, modestride)) \
	FUNC(void , glMultiModeDrawElementsIBM, GLMULTIMODEDRAWELEMENTSIBM, (const GLenum * mode , const GLsizei * count , GLenum type , const GLvoid * const * indices , GLsizei primcount , GLint modestride ), (mode, count, type, indices, primcount, modestride)) \
	END()
#else
#define EXTENSION_GL_IBM_multimode_draw_arrays(NAME, FUNC, CONST, END)
#endif

#ifndef GL_IBM_rasterpos_clip
#define GL_IBM_rasterpos_clip 1
#define EXTENSION_GL_IBM_rasterpos_clip(NAME, FUNC, CONST, END) \
	NAME(GL_IBM_rasterpos_clip) \
	CONST(int, GL_RASTER_POSITION_UNCLIPPED_IBM, 0x19262) \
	END()
#else
#define EXTENSION_GL_IBM_rasterpos_clip(NAME, FUNC, CONST, END)
#endif

#ifndef GL_IBM_texture_mirrored_repeat
#define GL_IBM_texture_mirrored_repeat 1
#define EXTENSION_GL_IBM_texture_mirrored_repeat(NAME, FUNC, CONST, END) \
	NAME(GL_IBM_texture_mirrored_repeat) \
	CONST(int, GL_MIRRORED_REPEAT_IBM, 0x8370) \
	END()
#else
#define EXTENSION_GL_IBM_texture_mirrored_repeat(NAME, FUNC, CONST, END)
#endif

#ifndef GL_IBM_vertex_array_lists
#define GL_IBM_vertex_array_lists 1
#define EXTENSION_GL_IBM_vertex_array_lists(NAME, FUNC, CONST, END) \
	NAME(GL_IBM_vertex_array_lists) \
	CONST(int, GL_VERTEX_ARRAY_LIST_IBM, 103070) \
	CONST(int, GL_NORMAL_ARRAY_LIST_IBM, 103071) \
	CONST(int, GL_COLOR_ARRAY_LIST_IBM, 103072) \
	CONST(int, GL_INDEX_ARRAY_LIST_IBM, 103073) \
	CONST(int, GL_TEXTURE_COORD_ARRAY_LIST_IBM, 103074) \
	CONST(int, GL_EDGE_FLAG_ARRAY_LIST_IBM, 103075) \
	CONST(int, GL_FOG_COORDINATE_ARRAY_LIST_IBM, 103076) \
	CONST(int, GL_SECONDARY_COLOR_ARRAY_LIST_IBM, 103077) \
	CONST(int, GL_VERTEX_ARRAY_LIST_STRIDE_IBM, 103080) \
	CONST(int, GL_NORMAL_ARRAY_LIST_STRIDE_IBM, 103081) \
	CONST(int, GL_COLOR_ARRAY_LIST_STRIDE_IBM, 103082) \
	CONST(int, GL_INDEX_ARRAY_LIST_STRIDE_IBM, 103083) \
	CONST(int, GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM, 103084) \
	CONST(int, GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM, 103085) \
	CONST(int, GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM, 103086) \
	CONST(int, GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM, 103087) \
	FUNC(void , glColorPointerListIBM, GLCOLORPOINTERLISTIBM, (GLint size , GLenum type , GLint stride , const GLvoid * * pointer , GLint ptrstride ), (size, type, stride, pointer, ptrstride)) \
	FUNC(void , glSecondaryColorPointerListIBM, GLSECONDARYCOLORPOINTERLISTIBM, (GLint size , GLenum type , GLint stride , const GLvoid * * pointer , GLint ptrstride ), (size, type, stride, pointer, ptrstride)) \
	FUNC(void , glEdgeFlagPointerListIBM, GLEDGEFLAGPOINTERLISTIBM, (GLint stride , const GLboolean * * pointer , GLint ptrstride ), (stride, pointer, ptrstride)) \
	FUNC(void , glFogCoordPointerListIBM, GLFOGCOORDPOINTERLISTIBM, (GLenum type , GLint stride , const GLvoid * * pointer , GLint ptrstride ), (type, stride, pointer, ptrstride)) \
	FUNC(void , glIndexPointerListIBM, GLINDEXPOINTERLISTIBM, (GLenum type , GLint stride , const GLvoid * * pointer , GLint ptrstride ), (type, stride, pointer, ptrstride)) \
	FUNC(void , glNormalPointerListIBM, GLNORMALPOINTERLISTIBM, (GLenum type , GLint stride , const GLvoid * * pointer , GLint ptrstride ), (type, stride, pointer, ptrstride)) \
	FUNC(void , glTexCoordPointerListIBM, GLTEXCOORDPOINTERLISTIBM, (GLint size , GLenum type , GLint stride , const GLvoid * * pointer , GLint ptrstride ), (size, type, stride, pointer, ptrstride)) \
	FUNC(void , glVertexPointerListIBM, GLVERTEXPOINTERLISTIBM, (GLint size , GLenum type , GLint stride , const GLvoid * * pointer , GLint ptrstride ), (size, type, stride, pointer, ptrstride)) \
	END()
#else
#define EXTENSION_GL_IBM_vertex_array_lists(NAME, FUNC, CONST, END)
#endif

#ifndef GL_INGR_blend_func_separate
#define GL_INGR_blend_func_separate 1
#define EXTENSION_GL_INGR_blend_func_separate(NAME, FUNC, CONST, END) \
	NAME(GL_INGR_blend_func_separate) \
	FUNC(void , glBlendFuncSeparateINGR, GLBLENDFUNCSEPARATEINGR, (GLenum sfactorRGB , GLenum dfactorRGB , GLenum sfactorAlpha , GLenum dfactorAlpha ), (sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha)) \
	END()
#else
#define EXTENSION_GL_INGR_blend_func_separate(NAME, FUNC, CONST, END)
#endif

#ifndef GL_INGR_color_clamp
#define GL_INGR_color_clamp 1
#define EXTENSION_GL_INGR_color_clamp(NAME, FUNC, CONST, END) \
	NAME(GL_INGR_color_clamp) \
	CONST(int, GL_RED_MIN_CLAMP_INGR, 0x8560) \
	CONST(int, GL_GREEN_MIN_CLAMP_INGR, 0x8561) \
	CONST(int, GL_BLUE_MIN_CLAMP_INGR, 0x8562) \
	CONST(int, GL_ALPHA_MIN_CLAMP_INGR, 0x8563) \
	CONST(int, GL_RED_MAX_CLAMP_INGR, 0x8564) \
	CONST(int, GL_GREEN_MAX_CLAMP_INGR, 0x8565) \
	CONST(int, GL_BLUE_MAX_CLAMP_INGR, 0x8566) \
	CONST(int, GL_ALPHA_MAX_CLAMP_INGR, 0x8567) \
	END()
#else
#define EXTENSION_GL_INGR_color_clamp(NAME, FUNC, CONST, END)
#endif

#ifndef GL_INGR_interlace_read
#define GL_INGR_interlace_read 1
#define EXTENSION_GL_INGR_interlace_read(NAME, FUNC, CONST, END) \
	NAME(GL_INGR_interlace_read) \
	CONST(int, GL_INTERLACE_READ_INGR, 0x8568) \
	END()
#else
#define EXTENSION_GL_INGR_interlace_read(NAME, FUNC, CONST, END)
#endif

#ifndef GL_INGR_palette_buffer
#define GL_INGR_palette_buffer 1
#define EXTENSION_GL_INGR_palette_buffer(NAME, FUNC, CONST, END) \
	NAME(GL_INGR_palette_buffer) \
	END()
#else
#define EXTENSION_GL_INGR_palette_buffer(NAME, FUNC, CONST, END)
#endif

#ifndef GL_INTEL_parallel_arrays
#define GL_INTEL_parallel_arrays 1
#define EXTENSION_GL_INTEL_parallel_arrays(NAME, FUNC, CONST, END) \
	NAME(GL_INTEL_parallel_arrays) \
	CONST(int, GL_PARALLEL_ARRAYS_INTEL, 0x83F4) \
	CONST(int, GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL, 0x83F5) \
	CONST(int, GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL, 0x83F6) \
	CONST(int, GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL, 0x83F7) \
	CONST(int, GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL, 0x83F8) \
	FUNC(void , glVertexPointervINTEL, GLVERTEXPOINTERVINTEL, (GLint size , GLenum type , const GLvoid * * pointer ), (size, type, pointer)) \
	FUNC(void , glNormalPointervINTEL, GLNORMALPOINTERVINTEL, (GLenum type , const GLvoid * * pointer ), (type, pointer)) \
	FUNC(void , glColorPointervINTEL, GLCOLORPOINTERVINTEL, (GLint size , GLenum type , const GLvoid * * pointer ), (size, type, pointer)) \
	FUNC(void , glTexCoordPointervINTEL, GLTEXCOORDPOINTERVINTEL, (GLint size , GLenum type , const GLvoid * * pointer ), (size, type, pointer)) \
	END()
#else
#define EXTENSION_GL_INTEL_parallel_arrays(NAME, FUNC, CONST, END)
#endif

#ifndef GL_INTEL_texture_scissor
#define GL_INTEL_texture_scissor 1
#define EXTENSION_GL_INTEL_texture_scissor(NAME, FUNC, CONST, END) \
	NAME(GL_INTEL_texture_scissor) \
	END()
#else
#define EXTENSION_GL_INTEL_texture_scissor(NAME, FUNC, CONST, END)
#endif

#ifndef GL_MESAX_texture_stack
#define GL_MESAX_texture_stack 1
#define EXTENSION_GL_MESAX_texture_stack(NAME, FUNC, CONST, END) \
	NAME(GL_MESAX_texture_stack) \
	CONST(int, GL_TEXTURE_1D_STACK_MESAX, 0x8759) \
	CONST(int, GL_TEXTURE_2D_STACK_MESAX, 0x875A) \
	CONST(int, GL_PROXY_TEXTURE_1D_STACK_MESAX, 0x875B) \
	CONST(int, GL_PROXY_TEXTURE_2D_STACK_MESAX, 0x875C) \
	CONST(int, GL_TEXTURE_1D_STACK_BINDING_MESAX, 0x875D) \
	CONST(int, GL_TEXTURE_2D_STACK_BINDING_MESAX, 0x875E) \
	END()
#else
#define EXTENSION_GL_MESAX_texture_stack(NAME, FUNC, CONST, END)
#endif

#ifndef GL_MESA_pack_invert
#define GL_MESA_pack_invert 1
#define EXTENSION_GL_MESA_pack_invert(NAME, FUNC, CONST, END) \
	NAME(GL_MESA_pack_invert) \
	CONST(int, GL_PACK_INVERT_MESA, 0x8758) \
	END()
#else
#define EXTENSION_GL_MESA_pack_invert(NAME, FUNC, CONST, END)
#endif

#ifndef GL_MESA_resize_buffers
#define GL_MESA_resize_buffers 1
#define EXTENSION_GL_MESA_resize_buffers(NAME, FUNC, CONST, END) \
	NAME(GL_MESA_resize_buffers) \
	FUNC(void , glResizeBuffersMESA, GLRESIZEBUFFERSMESA, (void ), ()) \
	END()
#else
#define EXTENSION_GL_MESA_resize_buffers(NAME, FUNC, CONST, END)
#endif

#ifndef GL_MESA_window_pos
#define GL_MESA_window_pos 1
#define EXTENSION_GL_MESA_window_pos(NAME, FUNC, CONST, END) \
	NAME(GL_MESA_window_pos) \
	FUNC(void , glWindowPos2dMESA, GLWINDOWPOS2DMESA, (GLdouble x , GLdouble y ), (x, y)) \
	FUNC(void , glWindowPos2dvMESA, GLWINDOWPOS2DVMESA, (const GLdouble * v ), (v)) \
	FUNC(void , glWindowPos2fMESA, GLWINDOWPOS2FMESA, (GLfloat x , GLfloat y ), (x, y)) \
	FUNC(void , glWindowPos2fvMESA, GLWINDOWPOS2FVMESA, (const GLfloat * v ), (v)) \
	FUNC(void , glWindowPos2iMESA, GLWINDOWPOS2IMESA, (GLint x , GLint y ), (x, y)) \
	FUNC(void , glWindowPos2ivMESA, GLWINDOWPOS2IVMESA, (const GLint * v ), (v)) \
	FUNC(void , glWindowPos2sMESA, GLWINDOWPOS2SMESA, (GLshort x , GLshort y ), (x, y)) \
	FUNC(void , glWindowPos2svMESA, GLWINDOWPOS2SVMESA, (const GLshort * v ), (v)) \
	FUNC(void , glWindowPos3dMESA, GLWINDOWPOS3DMESA, (GLdouble x , GLdouble y , GLdouble z ), (x, y, z)) \
	FUNC(void , glWindowPos3dvMESA, GLWINDOWPOS3DVMESA, (const GLdouble * v ), (v)) \
	FUNC(void , glWindowPos3fMESA, GLWINDOWPOS3FMESA, (GLfloat x , GLfloat y , GLfloat z ), (x, y, z)) \
	FUNC(void , glWindowPos3fvMESA, GLWINDOWPOS3FVMESA, (const GLfloat * v ), (v)) \
	FUNC(void , glWindowPos3iMESA, GLWINDOWPOS3IMESA, (GLint x , GLint y , GLint z ), (x, y, z)) \
	FUNC(void , glWindowPos3ivMESA, GLWINDOWPOS3IVMESA, (const GLint * v ), (v)) \
	FUNC(void , glWindowPos3sMESA, GLWINDOWPOS3SMESA, (GLshort x , GLshort y , GLshort z ), (x, y, z)) \
	FUNC(void , glWindowPos3svMESA, GLWINDOWPOS3SVMESA, (const GLshort * v ), (v)) \
	FUNC(void , glWindowPos4dMESA, GLWINDOWPOS4DMESA, (GLdouble x , GLdouble y , GLdouble z , GLdouble w ), (x, y, z, w)) \
	FUNC(void , glWindowPos4dvMESA, GLWINDOWPOS4DVMESA, (const GLdouble * v ), (v)) \
	FUNC(void , glWindowPos4fMESA, GLWINDOWPOS4FMESA, (GLfloat x , GLfloat y , GLfloat z , GLfloat w ), (x, y, z, w)) \
	FUNC(void , glWindowPos4fvMESA, GLWINDOWPOS4FVMESA, (const GLfloat * v ), (v)) \
	FUNC(void , glWindowPos4iMESA, GLWINDOWPOS4IMESA, (GLint x , GLint y , GLint z , GLint w ), (x, y, z, w)) \
	FUNC(void , glWindowPos4ivMESA, GLWINDOWPOS4IVMESA, (const GLint * v ), (v)) \
	FUNC(void , glWindowPos4sMESA, GLWINDOWPOS4SMESA, (GLshort x , GLshort y , GLshort z , GLshort w ), (x, y, z, w)) \
	FUNC(void , glWindowPos4svMESA, GLWINDOWPOS4SVMESA, (const GLshort * v ), (v)) \
	END()
#else
#define EXTENSION_GL_MESA_window_pos(NAME, FUNC, CONST, END)
#endif

#ifndef GL_MESA_ycbcr_texture
#define GL_MESA_ycbcr_texture 1
#define EXTENSION_GL_MESA_ycbcr_texture(NAME, FUNC, CONST, END) \
	NAME(GL_MESA_ycbcr_texture) \
	CONST(int, GL_UNSIGNED_SHORT_8_8_MESA, 0x85BA) \
	CONST(int, GL_UNSIGNED_SHORT_8_8_REV_MESA, 0x85BB) \
	CONST(int, GL_YCBCR_MESA, 0x8757) \
	END()
#else
#define EXTENSION_GL_MESA_ycbcr_texture(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_blend_square
#define GL_NV_blend_square 1
#define EXTENSION_GL_NV_blend_square(NAME, FUNC, CONST, END) \
	NAME(GL_NV_blend_square) \
	END()
#else
#define EXTENSION_GL_NV_blend_square(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_conditional_render
#define GL_NV_conditional_render 1
#define EXTENSION_GL_NV_conditional_render(NAME, FUNC, CONST, END) \
	NAME(GL_NV_conditional_render) \
	CONST(int, GL_QUERY_WAIT_NV, 0x8E13) \
	CONST(int, GL_QUERY_NO_WAIT_NV, 0x8E14) \
	CONST(int, GL_QUERY_BY_REGION_WAIT_NV, 0x8E15) \
	CONST(int, GL_QUERY_BY_REGION_NO_WAIT_NV, 0x8E16) \
	FUNC(void , glBeginConditionalRenderNV, GLBEGINCONDITIONALRENDERNV, (GLuint id , GLenum mode ), (id, mode)) \
	FUNC(void , glEndConditionalRenderNV, GLENDCONDITIONALRENDERNV, (void ), ()) \
	END()
#else
#define EXTENSION_GL_NV_conditional_render(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_copy_depth_to_color
#define GL_NV_copy_depth_to_color 1
#define EXTENSION_GL_NV_copy_depth_to_color(NAME, FUNC, CONST, END) \
	NAME(GL_NV_copy_depth_to_color) \
	CONST(int, GL_DEPTH_STENCIL_TO_RGBA_NV, 0x886E) \
	CONST(int, GL_DEPTH_STENCIL_TO_BGRA_NV, 0x886F) \
	END()
#else
#define EXTENSION_GL_NV_copy_depth_to_color(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_copy_image
#define GL_NV_copy_image 1
#define EXTENSION_GL_NV_copy_image(NAME, FUNC, CONST, END) \
	NAME(GL_NV_copy_image) \
	FUNC(void , glCopyImageSubDataNV, GLCOPYIMAGESUBDATANV, (GLuint srcName , GLenum srcTarget , GLint srcLevel , GLint srcX , GLint srcY , GLint srcZ , GLuint dstName , GLenum dstTarget , GLint dstLevel , GLint dstX , GLint dstY , GLint dstZ , GLsizei width , GLsizei height , GLsizei depth ), (srcName, srcTarget, srcLevel, srcX, srcY, srcZ, dstName, dstTarget, dstLevel, dstX, dstY, dstZ, width, height, depth)) \
	END()
#else
#define EXTENSION_GL_NV_copy_image(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_depth_buffer_float
#define GL_NV_depth_buffer_float 1
#define EXTENSION_GL_NV_depth_buffer_float(NAME, FUNC, CONST, END) \
	NAME(GL_NV_depth_buffer_float) \
	CONST(int, GL_DEPTH_COMPONENT32F_NV, 0x8DAB) \
	CONST(int, GL_DEPTH32F_STENCIL8_NV, 0x8DAC) \
	CONST(int, GL_FLOAT_32_UNSIGNED_INT_24_8_REV_NV, 0x8DAD) \
	CONST(int, GL_DEPTH_BUFFER_FLOAT_MODE_NV, 0x8DAF) \
	FUNC(void , glDepthRangedNV, GLDEPTHRANGEDNV, (GLdouble zNear , GLdouble zFar ), (zNear, zFar)) \
	FUNC(void , glClearDepthdNV, GLCLEARDEPTHDNV, (GLdouble depth ), (depth)) \
	FUNC(void , glDepthBoundsdNV, GLDEPTHBOUNDSDNV, (GLdouble zmin , GLdouble zmax ), (zmin, zmax)) \
	END()
#else
#define EXTENSION_GL_NV_depth_buffer_float(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_depth_clamp
#define GL_NV_depth_clamp 1
#define EXTENSION_GL_NV_depth_clamp(NAME, FUNC, CONST, END) \
	NAME(GL_NV_depth_clamp) \
	CONST(int, GL_DEPTH_CLAMP_NV, 0x864F) \
	END()
#else
#define EXTENSION_GL_NV_depth_clamp(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_evaluators
#define GL_NV_evaluators 1
#define EXTENSION_GL_NV_evaluators(NAME, FUNC, CONST, END) \
	NAME(GL_NV_evaluators) \
	CONST(int, GL_EVAL_2D_NV, 0x86C0) \
	CONST(int, GL_EVAL_TRIANGULAR_2D_NV, 0x86C1) \
	CONST(int, GL_MAP_TESSELLATION_NV, 0x86C2) \
	CONST(int, GL_MAP_ATTRIB_U_ORDER_NV, 0x86C3) \
	CONST(int, GL_MAP_ATTRIB_V_ORDER_NV, 0x86C4) \
	CONST(int, GL_EVAL_FRACTIONAL_TESSELLATION_NV, 0x86C5) \
	CONST(int, GL_EVAL_VERTEX_ATTRIB0_NV, 0x86C6) \
	CONST(int, GL_EVAL_VERTEX_ATTRIB1_NV, 0x86C7) \
	CONST(int, GL_EVAL_VERTEX_ATTRIB2_NV, 0x86C8) \
	CONST(int, GL_EVAL_VERTEX_ATTRIB3_NV, 0x86C9) \
	CONST(int, GL_EVAL_VERTEX_ATTRIB4_NV, 0x86CA) \
	CONST(int, GL_EVAL_VERTEX_ATTRIB5_NV, 0x86CB) \
	CONST(int, GL_EVAL_VERTEX_ATTRIB6_NV, 0x86CC) \
	CONST(int, GL_EVAL_VERTEX_ATTRIB7_NV, 0x86CD) \
	CONST(int, GL_EVAL_VERTEX_ATTRIB8_NV, 0x86CE) \
	CONST(int, GL_EVAL_VERTEX_ATTRIB9_NV, 0x86CF) \
	CONST(int, GL_EVAL_VERTEX_ATTRIB10_NV, 0x86D0) \
	CONST(int, GL_EVAL_VERTEX_ATTRIB11_NV, 0x86D1) \
	CONST(int, GL_EVAL_VERTEX_ATTRIB12_NV, 0x86D2) \
	CONST(int, GL_EVAL_VERTEX_ATTRIB13_NV, 0x86D3) \
	CONST(int, GL_EVAL_VERTEX_ATTRIB14_NV, 0x86D4) \
	CONST(int, GL_EVAL_VERTEX_ATTRIB15_NV, 0x86D5) \
	CONST(int, GL_MAX_MAP_TESSELLATION_NV, 0x86D6) \
	CONST(int, GL_MAX_RATIONAL_EVAL_ORDER_NV, 0x86D7) \
	FUNC(void , glMapControlPointsNV, GLMAPCONTROLPOINTSNV, (GLenum target , GLuint index , GLenum type , GLsizei ustride , GLsizei vstride , GLint uorder , GLint vorder , GLboolean packed , const GLvoid * points ), (target, index, type, ustride, vstride, uorder, vorder, packed, points)) \
	FUNC(void , glMapParameterivNV, GLMAPPARAMETERIVNV, (GLenum target , GLenum pname , const GLint * params ), (target, pname, params)) \
	FUNC(void , glMapParameterfvNV, GLMAPPARAMETERFVNV, (GLenum target , GLenum pname , const GLfloat * params ), (target, pname, params)) \
	FUNC(void , glGetMapControlPointsNV, GLGETMAPCONTROLPOINTSNV, (GLenum target , GLuint index , GLenum type , GLsizei ustride , GLsizei vstride , GLboolean packed , GLvoid * points ), (target, index, type, ustride, vstride, packed, points)) \
	FUNC(void , glGetMapParameterivNV, GLGETMAPPARAMETERIVNV, (GLenum target , GLenum pname , GLint * params ), (target, pname, params)) \
	FUNC(void , glGetMapParameterfvNV, GLGETMAPPARAMETERFVNV, (GLenum target , GLenum pname , GLfloat * params ), (target, pname, params)) \
	FUNC(void , glGetMapAttribParameterivNV, GLGETMAPATTRIBPARAMETERIVNV, (GLenum target , GLuint index , GLenum pname , GLint * params ), (target, index, pname, params)) \
	FUNC(void , glGetMapAttribParameterfvNV, GLGETMAPATTRIBPARAMETERFVNV, (GLenum target , GLuint index , GLenum pname , GLfloat * params ), (target, index, pname, params)) \
	FUNC(void , glEvalMapsNV, GLEVALMAPSNV, (GLenum target , GLenum mode ), (target, mode)) \
	END()
#else
#define EXTENSION_GL_NV_evaluators(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_explicit_multisample
#define GL_NV_explicit_multisample 1
#define EXTENSION_GL_NV_explicit_multisample(NAME, FUNC, CONST, END) \
	NAME(GL_NV_explicit_multisample) \
	CONST(int, GL_SAMPLE_POSITION_NV, 0x8E50) \
	CONST(int, GL_SAMPLE_MASK_NV, 0x8E51) \
	CONST(int, GL_SAMPLE_MASK_VALUE_NV, 0x8E52) \
	CONST(int, GL_TEXTURE_BINDING_RENDERBUFFER_NV, 0x8E53) \
	CONST(int, GL_TEXTURE_RENDERBUFFER_DATA_STORE_BINDING_NV, 0x8E54) \
	CONST(int, GL_TEXTURE_RENDERBUFFER_NV, 0x8E55) \
	CONST(int, GL_SAMPLER_RENDERBUFFER_NV, 0x8E56) \
	CONST(int, GL_INT_SAMPLER_RENDERBUFFER_NV, 0x8E57) \
	CONST(int, GL_UNSIGNED_INT_SAMPLER_RENDERBUFFER_NV, 0x8E58) \
	CONST(int, GL_MAX_SAMPLE_MASK_WORDS_NV, 0x8E59) \
	FUNC(void , glGetMultisamplefvNV, GLGETMULTISAMPLEFVNV, (GLenum pname , GLuint index , GLfloat * val ), (pname, index, val)) \
	FUNC(void , glSampleMaskIndexedNV, GLSAMPLEMASKINDEXEDNV, (GLuint index , GLbitfield mask ), (index, mask)) \
	FUNC(void , glTexRenderbufferNV, GLTEXRENDERBUFFERNV, (GLenum target , GLuint renderbuffer ), (target, renderbuffer)) \
	END()
#else
#define EXTENSION_GL_NV_explicit_multisample(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_fence
#define GL_NV_fence 1
#define EXTENSION_GL_NV_fence(NAME, FUNC, CONST, END) \
	NAME(GL_NV_fence) \
	CONST(int, GL_ALL_COMPLETED_NV, 0x84F2) \
	CONST(int, GL_FENCE_STATUS_NV, 0x84F3) \
	CONST(int, GL_FENCE_CONDITION_NV, 0x84F4) \
	FUNC(void , glDeleteFencesNV, GLDELETEFENCESNV, (GLsizei n , const GLuint * fences ), (n, fences)) \
	FUNC(void , glGenFencesNV, GLGENFENCESNV, (GLsizei n , GLuint * fences ), (n, fences)) \
	FUNC(GLboolean , glIsFenceNV, GLISFENCENV, (GLuint fence ), (fence)) \
	FUNC(GLboolean , glTestFenceNV, GLTESTFENCENV, (GLuint fence ), (fence)) \
	FUNC(void , glGetFenceivNV, GLGETFENCEIVNV, (GLuint fence , GLenum pname , GLint * params ), (fence, pname, params)) \
	FUNC(void , glFinishFenceNV, GLFINISHFENCENV, (GLuint fence ), (fence)) \
	FUNC(void , glSetFenceNV, GLSETFENCENV, (GLuint fence , GLenum condition ), (fence, condition)) \
	END()
#else
#define EXTENSION_GL_NV_fence(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_float_buffer
#define GL_NV_float_buffer 1
#define EXTENSION_GL_NV_float_buffer(NAME, FUNC, CONST, END) \
	NAME(GL_NV_float_buffer) \
	CONST(int, GL_FLOAT_R_NV, 0x8880) \
	CONST(int, GL_FLOAT_RG_NV, 0x8881) \
	CONST(int, GL_FLOAT_RGB_NV, 0x8882) \
	CONST(int, GL_FLOAT_RGBA_NV, 0x8883) \
	CONST(int, GL_FLOAT_R16_NV, 0x8884) \
	CONST(int, GL_FLOAT_R32_NV, 0x8885) \
	CONST(int, GL_FLOAT_RG16_NV, 0x8886) \
	CONST(int, GL_FLOAT_RG32_NV, 0x8887) \
	CONST(int, GL_FLOAT_RGB16_NV, 0x8888) \
	CONST(int, GL_FLOAT_RGB32_NV, 0x8889) \
	CONST(int, GL_FLOAT_RGBA16_NV, 0x888A) \
	CONST(int, GL_FLOAT_RGBA32_NV, 0x888B) \
	CONST(int, GL_TEXTURE_FLOAT_COMPONENTS_NV, 0x888C) \
	CONST(int, GL_FLOAT_CLEAR_COLOR_VALUE_NV, 0x888D) \
	CONST(int, GL_FLOAT_RGBA_MODE_NV, 0x888E) \
	END()
#else
#define EXTENSION_GL_NV_float_buffer(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_fog_distance
#define GL_NV_fog_distance 1
#define EXTENSION_GL_NV_fog_distance(NAME, FUNC, CONST, END) \
	NAME(GL_NV_fog_distance) \
	CONST(int, GL_FOG_DISTANCE_MODE_NV, 0x855A) \
	CONST(int, GL_EYE_RADIAL_NV, 0x855B) \
	CONST(int, GL_EYE_PLANE_ABSOLUTE_NV, 0x855C) \
	END()
#else
#define EXTENSION_GL_NV_fog_distance(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_fragment_program
#define GL_NV_fragment_program 1
#define EXTENSION_GL_NV_fragment_program(NAME, FUNC, CONST, END) \
	NAME(GL_NV_fragment_program) \
	CONST(int, GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV, 0x8868) \
	CONST(int, GL_FRAGMENT_PROGRAM_NV, 0x8870) \
	CONST(int, GL_MAX_TEXTURE_COORDS_NV, 0x8871) \
	CONST(int, GL_MAX_TEXTURE_IMAGE_UNITS_NV, 0x8872) \
	CONST(int, GL_FRAGMENT_PROGRAM_BINDING_NV, 0x8873) \
	CONST(int, GL_PROGRAM_ERROR_STRING_NV, 0x8874) \
	END()
#else
#define EXTENSION_GL_NV_fragment_program(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_fragment_program2
#define GL_NV_fragment_program2 1
#define EXTENSION_GL_NV_fragment_program2(NAME, FUNC, CONST, END) \
	NAME(GL_NV_fragment_program2) \
	CONST(int, GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV, 0x88F4) \
	CONST(int, GL_MAX_PROGRAM_CALL_DEPTH_NV, 0x88F5) \
	CONST(int, GL_MAX_PROGRAM_IF_DEPTH_NV, 0x88F6) \
	CONST(int, GL_MAX_PROGRAM_LOOP_DEPTH_NV, 0x88F7) \
	CONST(int, GL_MAX_PROGRAM_LOOP_COUNT_NV, 0x88F8) \
	END()
#else
#define EXTENSION_GL_NV_fragment_program2(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_fragment_program4
#define GL_NV_fragment_program4 1
#define EXTENSION_GL_NV_fragment_program4(NAME, FUNC, CONST, END) \
	NAME(GL_NV_fragment_program4) \
	END()
#else
#define EXTENSION_GL_NV_fragment_program4(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_fragment_program_option
#define GL_NV_fragment_program_option 1
#define EXTENSION_GL_NV_fragment_program_option(NAME, FUNC, CONST, END) \
	NAME(GL_NV_fragment_program_option) \
	END()
#else
#define EXTENSION_GL_NV_fragment_program_option(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_framebuffer_multisample_coverage
#define GL_NV_framebuffer_multisample_coverage 1
#define EXTENSION_GL_NV_framebuffer_multisample_coverage(NAME, FUNC, CONST, END) \
	NAME(GL_NV_framebuffer_multisample_coverage) \
	CONST(int, GL_RENDERBUFFER_COVERAGE_SAMPLES_NV, 0x8CAB) \
	CONST(int, GL_RENDERBUFFER_COLOR_SAMPLES_NV, 0x8E10) \
	CONST(int, GL_MAX_MULTISAMPLE_COVERAGE_MODES_NV, 0x8E11) \
	CONST(int, GL_MULTISAMPLE_COVERAGE_MODES_NV, 0x8E12) \
	FUNC(void , glRenderbufferStorageMultisampleCoverageNV, GLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENV, (GLenum target , GLsizei coverageSamples , GLsizei colorSamples , GLenum internalformat , GLsizei width , GLsizei height ), (target, coverageSamples, colorSamples, internalformat, width, height)) \
	END()
#else
#define EXTENSION_GL_NV_framebuffer_multisample_coverage(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_geometry_program4
#define GL_NV_geometry_program4 1
#define EXTENSION_GL_NV_geometry_program4(NAME, FUNC, CONST, END) \
	NAME(GL_NV_geometry_program4) \
	CONST(int, GL_LINES_ADJACENCY_EXT, 0x000A) \
	CONST(int, GL_LINE_STRIP_ADJACENCY_EXT, 0x000B) \
	CONST(int, GL_TRIANGLES_ADJACENCY_EXT, 0x000C) \
	CONST(int, GL_TRIANGLE_STRIP_ADJACENCY_EXT, 0x000D) \
	CONST(int, GL_GEOMETRY_PROGRAM_NV, 0x8C26) \
	CONST(int, GL_MAX_PROGRAM_OUTPUT_VERTICES_NV, 0x8C27) \
	CONST(int, GL_MAX_PROGRAM_TOTAL_OUTPUT_COMPONENTS_NV, 0x8C28) \
	CONST(int, GL_GEOMETRY_VERTICES_OUT_EXT, 0x8DDA) \
	CONST(int, GL_GEOMETRY_INPUT_TYPE_EXT, 0x8DDB) \
	CONST(int, GL_GEOMETRY_OUTPUT_TYPE_EXT, 0x8DDC) \
	CONST(int, GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT, 0x8C29) \
	CONST(int, GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT, 0x8DA7) \
	CONST(int, GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT, 0x8DA8) \
	CONST(int, GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT, 0x8DA9) \
	CONST(int, GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT, 0x8CD4) \
	CONST(int, GL_PROGRAM_POINT_SIZE_EXT, 0x8642) \
	FUNC(void , glProgramVertexLimitNV, GLPROGRAMVERTEXLIMITNV, (GLenum target , GLint limit ), (target, limit)) \
	FUNC(void , glFramebufferTextureEXT, GLFRAMEBUFFERTEXTUREEXT, (GLenum target , GLenum attachment , GLuint texture , GLint level ), (target, attachment, texture, level)) \
	FUNC(void , glFramebufferTextureLayerEXT, GLFRAMEBUFFERTEXTURELAYEREXT, (GLenum target , GLenum attachment , GLuint texture , GLint level , GLint layer ), (target, attachment, texture, level, layer)) \
	FUNC(void , glFramebufferTextureFaceEXT, GLFRAMEBUFFERTEXTUREFACEEXT, (GLenum target , GLenum attachment , GLuint texture , GLint level , GLenum face ), (target, attachment, texture, level, face)) \
	END()
#else
#define EXTENSION_GL_NV_geometry_program4(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_geometry_shader4
#define GL_NV_geometry_shader4 1
#define EXTENSION_GL_NV_geometry_shader4(NAME, FUNC, CONST, END) \
	NAME(GL_NV_geometry_shader4) \
	END()
#else
#define EXTENSION_GL_NV_geometry_shader4(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_gpu_program4
#define GL_NV_gpu_program4 1
#define EXTENSION_GL_NV_gpu_program4(NAME, FUNC, CONST, END) \
	NAME(GL_NV_gpu_program4) \
	CONST(int, GL_MIN_PROGRAM_TEXEL_OFFSET_NV, 0x8904) \
	CONST(int, GL_MAX_PROGRAM_TEXEL_OFFSET_NV, 0x8905) \
	CONST(int, GL_PROGRAM_ATTRIB_COMPONENTS_NV, 0x8906) \
	CONST(int, GL_PROGRAM_RESULT_COMPONENTS_NV, 0x8907) \
	CONST(int, GL_MAX_PROGRAM_ATTRIB_COMPONENTS_NV, 0x8908) \
	CONST(int, GL_MAX_PROGRAM_RESULT_COMPONENTS_NV, 0x8909) \
	CONST(int, GL_MAX_PROGRAM_GENERIC_ATTRIBS_NV, 0x8DA5) \
	CONST(int, GL_MAX_PROGRAM_GENERIC_RESULTS_NV, 0x8DA6) \
	FUNC(void , glProgramLocalParameterI4iNV, GLPROGRAMLOCALPARAMETERI4INV, (GLenum target , GLuint index , GLint x , GLint y , GLint z , GLint w ), (target, index, x, y, z, w)) \
	FUNC(void , glProgramLocalParameterI4ivNV, GLPROGRAMLOCALPARAMETERI4IVNV, (GLenum target , GLuint index , const GLint * params ), (target, index, params)) \
	FUNC(void , glProgramLocalParametersI4ivNV, GLPROGRAMLOCALPARAMETERSI4IVNV, (GLenum target , GLuint index , GLsizei count , const GLint * params ), (target, index, count, params)) \
	FUNC(void , glProgramLocalParameterI4uiNV, GLPROGRAMLOCALPARAMETERI4UINV, (GLenum target , GLuint index , GLuint x , GLuint y , GLuint z , GLuint w ), (target, index, x, y, z, w)) \
	FUNC(void , glProgramLocalParameterI4uivNV, GLPROGRAMLOCALPARAMETERI4UIVNV, (GLenum target , GLuint index , const GLuint * params ), (target, index, params)) \
	FUNC(void , glProgramLocalParametersI4uivNV, GLPROGRAMLOCALPARAMETERSI4UIVNV, (GLenum target , GLuint index , GLsizei count , const GLuint * params ), (target, index, count, params)) \
	FUNC(void , glProgramEnvParameterI4iNV, GLPROGRAMENVPARAMETERI4INV, (GLenum target , GLuint index , GLint x , GLint y , GLint z , GLint w ), (target, index, x, y, z, w)) \
	FUNC(void , glProgramEnvParameterI4ivNV, GLPROGRAMENVPARAMETERI4IVNV, (GLenum target , GLuint index , const GLint * params ), (target, index, params)) \
	FUNC(void , glProgramEnvParametersI4ivNV, GLPROGRAMENVPARAMETERSI4IVNV, (GLenum target , GLuint index , GLsizei count , const GLint * params ), (target, index, count, params)) \
	FUNC(void , glProgramEnvParameterI4uiNV, GLPROGRAMENVPARAMETERI4UINV, (GLenum target , GLuint index , GLuint x , GLuint y , GLuint z , GLuint w ), (target, index, x, y, z, w)) \
	FUNC(void , glProgramEnvParameterI4uivNV, GLPROGRAMENVPARAMETERI4UIVNV, (GLenum target , GLuint index , const GLuint * params ), (target, index, params)) \
	FUNC(void , glProgramEnvParametersI4uivNV, GLPROGRAMENVPARAMETERSI4UIVNV, (GLenum target , GLuint index , GLsizei count , const GLuint * params ), (target, index, count, params)) \
	FUNC(void , glGetProgramLocalParameterIivNV, GLGETPROGRAMLOCALPARAMETERIIVNV, (GLenum target , GLuint index , GLint * params ), (target, index, params)) \
	FUNC(void , glGetProgramLocalParameterIuivNV, GLGETPROGRAMLOCALPARAMETERIUIVNV, (GLenum target , GLuint index , GLuint * params ), (target, index, params)) \
	FUNC(void , glGetProgramEnvParameterIivNV, GLGETPROGRAMENVPARAMETERIIVNV, (GLenum target , GLuint index , GLint * params ), (target, index, params)) \
	FUNC(void , glGetProgramEnvParameterIuivNV, GLGETPROGRAMENVPARAMETERIUIVNV, (GLenum target , GLuint index , GLuint * params ), (target, index, params)) \
	END()
#else
#define EXTENSION_GL_NV_gpu_program4(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_gpu_program5
#define GL_NV_gpu_program5 1
#define EXTENSION_GL_NV_gpu_program5(NAME, FUNC, CONST, END) \
	NAME(GL_NV_gpu_program5) \
	CONST(int, GL_MAX_GEOMETRY_PROGRAM_INVOCATIONS_NV, 0x8E5A) \
	CONST(int, GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_NV, 0x8E5B) \
	CONST(int, GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_NV, 0x8E5C) \
	CONST(int, GL_FRAGMENT_PROGRAM_INTERPOLATION_OFFSET_BITS_NV, 0x8E5D) \
	CONST(int, GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_NV, 0x8E5E) \
	CONST(int, GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_NV, 0x8E5F) \
	CONST(int, GL_MAX_PROGRAM_SUBROUTINE_PARAMETERS_NV, 0x8F44) \
	CONST(int, GL_MAX_PROGRAM_SUBROUTINE_NUM_NV, 0x8F45) \
	FUNC(void , glProgramSubroutineParametersuivNV, GLPROGRAMSUBROUTINEPARAMETERSUIVNV, (GLenum target , GLsizei count , const GLuint * params ), (target, count, params)) \
	FUNC(void , glGetProgramSubroutineParameteruivNV, GLGETPROGRAMSUBROUTINEPARAMETERUIVNV, (GLenum target , GLuint index , GLuint * param ), (target, index, param)) \
	END()
#else
#define EXTENSION_GL_NV_gpu_program5(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_gpu_shader5
#define GL_NV_gpu_shader5 1
#define EXTENSION_GL_NV_gpu_shader5(NAME, FUNC, CONST, END) \
	NAME(GL_NV_gpu_shader5) \
	CONST(int, GL_INT64_NV, 0x140E) \
	CONST(int, GL_UNSIGNED_INT64_NV, 0x140F) \
	CONST(int, GL_INT8_NV, 0x8FE0) \
	CONST(int, GL_INT8_VEC2_NV, 0x8FE1) \
	CONST(int, GL_INT8_VEC3_NV, 0x8FE2) \
	CONST(int, GL_INT8_VEC4_NV, 0x8FE3) \
	CONST(int, GL_INT16_NV, 0x8FE4) \
	CONST(int, GL_INT16_VEC2_NV, 0x8FE5) \
	CONST(int, GL_INT16_VEC3_NV, 0x8FE6) \
	CONST(int, GL_INT16_VEC4_NV, 0x8FE7) \
	CONST(int, GL_INT64_VEC2_NV, 0x8FE9) \
	CONST(int, GL_INT64_VEC3_NV, 0x8FEA) \
	CONST(int, GL_INT64_VEC4_NV, 0x8FEB) \
	CONST(int, GL_UNSIGNED_INT8_NV, 0x8FEC) \
	CONST(int, GL_UNSIGNED_INT8_VEC2_NV, 0x8FED) \
	CONST(int, GL_UNSIGNED_INT8_VEC3_NV, 0x8FEE) \
	CONST(int, GL_UNSIGNED_INT8_VEC4_NV, 0x8FEF) \
	CONST(int, GL_UNSIGNED_INT16_NV, 0x8FF0) \
	CONST(int, GL_UNSIGNED_INT16_VEC2_NV, 0x8FF1) \
	CONST(int, GL_UNSIGNED_INT16_VEC3_NV, 0x8FF2) \
	CONST(int, GL_UNSIGNED_INT16_VEC4_NV, 0x8FF3) \
	CONST(int, GL_UNSIGNED_INT64_VEC2_NV, 0x8FF5) \
	CONST(int, GL_UNSIGNED_INT64_VEC3_NV, 0x8FF6) \
	CONST(int, GL_UNSIGNED_INT64_VEC4_NV, 0x8FF7) \
	CONST(int, GL_FLOAT16_NV, 0x8FF8) \
	CONST(int, GL_FLOAT16_VEC2_NV, 0x8FF9) \
	CONST(int, GL_FLOAT16_VEC3_NV, 0x8FFA) \
	CONST(int, GL_FLOAT16_VEC4_NV, 0x8FFB) \
	FUNC(void , glUniform1i64NV, GLUNIFORM1I64NV, (GLint location , GLint64EXT x ), (location, x)) \
	FUNC(void , glUniform2i64NV, GLUNIFORM2I64NV, (GLint location , GLint64EXT x , GLint64EXT y ), (location, x, y)) \
	FUNC(void , glUniform3i64NV, GLUNIFORM3I64NV, (GLint location , GLint64EXT x , GLint64EXT y , GLint64EXT z ), (location, x, y, z)) \
	FUNC(void , glUniform4i64NV, GLUNIFORM4I64NV, (GLint location , GLint64EXT x , GLint64EXT y , GLint64EXT z , GLint64EXT w ), (location, x, y, z, w)) \
	FUNC(void , glUniform1i64vNV, GLUNIFORM1I64VNV, (GLint location , GLsizei count , const GLint64EXT * value ), (location, count, value)) \
	FUNC(void , glUniform2i64vNV, GLUNIFORM2I64VNV, (GLint location , GLsizei count , const GLint64EXT * value ), (location, count, value)) \
	FUNC(void , glUniform3i64vNV, GLUNIFORM3I64VNV, (GLint location , GLsizei count , const GLint64EXT * value ), (location, count, value)) \
	FUNC(void , glUniform4i64vNV, GLUNIFORM4I64VNV, (GLint location , GLsizei count , const GLint64EXT * value ), (location, count, value)) \
	FUNC(void , glUniform1ui64NV, GLUNIFORM1UI64NV, (GLint location , GLuint64EXT x ), (location, x)) \
	FUNC(void , glUniform2ui64NV, GLUNIFORM2UI64NV, (GLint location , GLuint64EXT x , GLuint64EXT y ), (location, x, y)) \
	FUNC(void , glUniform3ui64NV, GLUNIFORM3UI64NV, (GLint location , GLuint64EXT x , GLuint64EXT y , GLuint64EXT z ), (location, x, y, z)) \
	FUNC(void , glUniform4ui64NV, GLUNIFORM4UI64NV, (GLint location , GLuint64EXT x , GLuint64EXT y , GLuint64EXT z , GLuint64EXT w ), (location, x, y, z, w)) \
	FUNC(void , glUniform1ui64vNV, GLUNIFORM1UI64VNV, (GLint location , GLsizei count , const GLuint64EXT * value ), (location, count, value)) \
	FUNC(void , glUniform2ui64vNV, GLUNIFORM2UI64VNV, (GLint location , GLsizei count , const GLuint64EXT * value ), (location, count, value)) \
	FUNC(void , glUniform3ui64vNV, GLUNIFORM3UI64VNV, (GLint location , GLsizei count , const GLuint64EXT * value ), (location, count, value)) \
	FUNC(void , glUniform4ui64vNV, GLUNIFORM4UI64VNV, (GLint location , GLsizei count , const GLuint64EXT * value ), (location, count, value)) \
	FUNC(void , glGetUniformi64vNV, GLGETUNIFORMI64VNV, (GLuint program , GLint location , GLint64EXT * params ), (program, location, params)) \
	FUNC(void , glProgramUniform1i64NV, GLPROGRAMUNIFORM1I64NV, (GLuint program , GLint location , GLint64EXT x ), (program, location, x)) \
	FUNC(void , glProgramUniform2i64NV, GLPROGRAMUNIFORM2I64NV, (GLuint program , GLint location , GLint64EXT x , GLint64EXT y ), (program, location, x, y)) \
	FUNC(void , glProgramUniform3i64NV, GLPROGRAMUNIFORM3I64NV, (GLuint program , GLint location , GLint64EXT x , GLint64EXT y , GLint64EXT z ), (program, location, x, y, z)) \
	FUNC(void , glProgramUniform4i64NV, GLPROGRAMUNIFORM4I64NV, (GLuint program , GLint location , GLint64EXT x , GLint64EXT y , GLint64EXT z , GLint64EXT w ), (program, location, x, y, z, w)) \
	FUNC(void , glProgramUniform1i64vNV, GLPROGRAMUNIFORM1I64VNV, (GLuint program , GLint location , GLsizei count , const GLint64EXT * value ), (program, location, count, value)) \
	FUNC(void , glProgramUniform2i64vNV, GLPROGRAMUNIFORM2I64VNV, (GLuint program , GLint location , GLsizei count , const GLint64EXT * value ), (program, location, count, value)) \
	FUNC(void , glProgramUniform3i64vNV, GLPROGRAMUNIFORM3I64VNV, (GLuint program , GLint location , GLsizei count , const GLint64EXT * value ), (program, location, count, value)) \
	FUNC(void , glProgramUniform4i64vNV, GLPROGRAMUNIFORM4I64VNV, (GLuint program , GLint location , GLsizei count , const GLint64EXT * value ), (program, location, count, value)) \
	FUNC(void , glProgramUniform1ui64NV, GLPROGRAMUNIFORM1UI64NV, (GLuint program , GLint location , GLuint64EXT x ), (program, location, x)) \
	FUNC(void , glProgramUniform2ui64NV, GLPROGRAMUNIFORM2UI64NV, (GLuint program , GLint location , GLuint64EXT x , GLuint64EXT y ), (program, location, x, y)) \
	FUNC(void , glProgramUniform3ui64NV, GLPROGRAMUNIFORM3UI64NV, (GLuint program , GLint location , GLuint64EXT x , GLuint64EXT y , GLuint64EXT z ), (program, location, x, y, z)) \
	FUNC(void , glProgramUniform4ui64NV, GLPROGRAMUNIFORM4UI64NV, (GLuint program , GLint location , GLuint64EXT x , GLuint64EXT y , GLuint64EXT z , GLuint64EXT w ), (program, location, x, y, z, w)) \
	FUNC(void , glProgramUniform1ui64vNV, GLPROGRAMUNIFORM1UI64VNV, (GLuint program , GLint location , GLsizei count , const GLuint64EXT * value ), (program, location, count, value)) \
	FUNC(void , glProgramUniform2ui64vNV, GLPROGRAMUNIFORM2UI64VNV, (GLuint program , GLint location , GLsizei count , const GLuint64EXT * value ), (program, location, count, value)) \
	FUNC(void , glProgramUniform3ui64vNV, GLPROGRAMUNIFORM3UI64VNV, (GLuint program , GLint location , GLsizei count , const GLuint64EXT * value ), (program, location, count, value)) \
	FUNC(void , glProgramUniform4ui64vNV, GLPROGRAMUNIFORM4UI64VNV, (GLuint program , GLint location , GLsizei count , const GLuint64EXT * value ), (program, location, count, value)) \
	END()
#else
#define EXTENSION_GL_NV_gpu_shader5(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_half_float
#define GL_NV_half_float 1
#define EXTENSION_GL_NV_half_float(NAME, FUNC, CONST, END) \
	NAME(GL_NV_half_float) \
	CONST(int, GL_HALF_FLOAT_NV, 0x140B) \
	FUNC(void , glVertex2hNV, GLVERTEX2HNV, (GLhalfNV x , GLhalfNV y ), (x, y)) \
	FUNC(void , glVertex2hvNV, GLVERTEX2HVNV, (const GLhalfNV * v ), (v)) \
	FUNC(void , glVertex3hNV, GLVERTEX3HNV, (GLhalfNV x , GLhalfNV y , GLhalfNV z ), (x, y, z)) \
	FUNC(void , glVertex3hvNV, GLVERTEX3HVNV, (const GLhalfNV * v ), (v)) \
	FUNC(void , glVertex4hNV, GLVERTEX4HNV, (GLhalfNV x , GLhalfNV y , GLhalfNV z , GLhalfNV w ), (x, y, z, w)) \
	FUNC(void , glVertex4hvNV, GLVERTEX4HVNV, (const GLhalfNV * v ), (v)) \
	FUNC(void , glNormal3hNV, GLNORMAL3HNV, (GLhalfNV nx , GLhalfNV ny , GLhalfNV nz ), (nx, ny, nz)) \
	FUNC(void , glNormal3hvNV, GLNORMAL3HVNV, (const GLhalfNV * v ), (v)) \
	FUNC(void , glColor3hNV, GLCOLOR3HNV, (GLhalfNV red , GLhalfNV green , GLhalfNV blue ), (red, green, blue)) \
	FUNC(void , glColor3hvNV, GLCOLOR3HVNV, (const GLhalfNV * v ), (v)) \
	FUNC(void , glColor4hNV, GLCOLOR4HNV, (GLhalfNV red , GLhalfNV green , GLhalfNV blue , GLhalfNV alpha ), (red, green, blue, alpha)) \
	FUNC(void , glColor4hvNV, GLCOLOR4HVNV, (const GLhalfNV * v ), (v)) \
	FUNC(void , glTexCoord1hNV, GLTEXCOORD1HNV, (GLhalfNV s ), (s)) \
	FUNC(void , glTexCoord1hvNV, GLTEXCOORD1HVNV, (const GLhalfNV * v ), (v)) \
	FUNC(void , glTexCoord2hNV, GLTEXCOORD2HNV, (GLhalfNV s , GLhalfNV t ), (s, t)) \
	FUNC(void , glTexCoord2hvNV, GLTEXCOORD2HVNV, (const GLhalfNV * v ), (v)) \
	FUNC(void , glTexCoord3hNV, GLTEXCOORD3HNV, (GLhalfNV s , GLhalfNV t , GLhalfNV r ), (s, t, r)) \
	FUNC(void , glTexCoord3hvNV, GLTEXCOORD3HVNV, (const GLhalfNV * v ), (v)) \
	FUNC(void , glTexCoord4hNV, GLTEXCOORD4HNV, (GLhalfNV s , GLhalfNV t , GLhalfNV r , GLhalfNV q ), (s, t, r, q)) \
	FUNC(void , glTexCoord4hvNV, GLTEXCOORD4HVNV, (const GLhalfNV * v ), (v)) \
	FUNC(void , glMultiTexCoord1hNV, GLMULTITEXCOORD1HNV, (GLenum target , GLhalfNV s ), (target, s)) \
	FUNC(void , glMultiTexCoord1hvNV, GLMULTITEXCOORD1HVNV, (GLenum target , const GLhalfNV * v ), (target, v)) \
	FUNC(void , glMultiTexCoord2hNV, GLMULTITEXCOORD2HNV, (GLenum target , GLhalfNV s , GLhalfNV t ), (target, s, t)) \
	FUNC(void , glMultiTexCoord2hvNV, GLMULTITEXCOORD2HVNV, (GLenum target , const GLhalfNV * v ), (target, v)) \
	FUNC(void , glMultiTexCoord3hNV, GLMULTITEXCOORD3HNV, (GLenum target , GLhalfNV s , GLhalfNV t , GLhalfNV r ), (target, s, t, r)) \
	FUNC(void , glMultiTexCoord3hvNV, GLMULTITEXCOORD3HVNV, (GLenum target , const GLhalfNV * v ), (target, v)) \
	FUNC(void , glMultiTexCoord4hNV, GLMULTITEXCOORD4HNV, (GLenum target , GLhalfNV s , GLhalfNV t , GLhalfNV r , GLhalfNV q ), (target, s, t, r, q)) \
	FUNC(void , glMultiTexCoord4hvNV, GLMULTITEXCOORD4HVNV, (GLenum target , const GLhalfNV * v ), (target, v)) \
	FUNC(void , glFogCoordhNV, GLFOGCOORDHNV, (GLhalfNV fog ), (fog)) \
	FUNC(void , glFogCoordhvNV, GLFOGCOORDHVNV, (const GLhalfNV * fog ), (fog)) \
	FUNC(void , glSecondaryColor3hNV, GLSECONDARYCOLOR3HNV, (GLhalfNV red , GLhalfNV green , GLhalfNV blue ), (red, green, blue)) \
	FUNC(void , glSecondaryColor3hvNV, GLSECONDARYCOLOR3HVNV, (const GLhalfNV * v ), (v)) \
	FUNC(void , glVertexWeighthNV, GLVERTEXWEIGHTHNV, (GLhalfNV weight ), (weight)) \
	FUNC(void , glVertexWeighthvNV, GLVERTEXWEIGHTHVNV, (const GLhalfNV * weight ), (weight)) \
	FUNC(void , glVertexAttrib1hNV, GLVERTEXATTRIB1HNV, (GLuint index , GLhalfNV x ), (index, x)) \
	FUNC(void , glVertexAttrib1hvNV, GLVERTEXATTRIB1HVNV, (GLuint index , const GLhalfNV * v ), (index, v)) \
	FUNC(void , glVertexAttrib2hNV, GLVERTEXATTRIB2HNV, (GLuint index , GLhalfNV x , GLhalfNV y ), (index, x, y)) \
	FUNC(void , glVertexAttrib2hvNV, GLVERTEXATTRIB2HVNV, (GLuint index , const GLhalfNV * v ), (index, v)) \
	FUNC(void , glVertexAttrib3hNV, GLVERTEXATTRIB3HNV, (GLuint index , GLhalfNV x , GLhalfNV y , GLhalfNV z ), (index, x, y, z)) \
	FUNC(void , glVertexAttrib3hvNV, GLVERTEXATTRIB3HVNV, (GLuint index , const GLhalfNV * v ), (index, v)) \
	FUNC(void , glVertexAttrib4hNV, GLVERTEXATTRIB4HNV, (GLuint index , GLhalfNV x , GLhalfNV y , GLhalfNV z , GLhalfNV w ), (index, x, y, z, w)) \
	FUNC(void , glVertexAttrib4hvNV, GLVERTEXATTRIB4HVNV, (GLuint index , const GLhalfNV * v ), (index, v)) \
	FUNC(void , glVertexAttribs1hvNV, GLVERTEXATTRIBS1HVNV, (GLuint index , GLsizei n , const GLhalfNV * v ), (index, n, v)) \
	FUNC(void , glVertexAttribs2hvNV, GLVERTEXATTRIBS2HVNV, (GLuint index , GLsizei n , const GLhalfNV * v ), (index, n, v)) \
	FUNC(void , glVertexAttribs3hvNV, GLVERTEXATTRIBS3HVNV, (GLuint index , GLsizei n , const GLhalfNV * v ), (index, n, v)) \
	FUNC(void , glVertexAttribs4hvNV, GLVERTEXATTRIBS4HVNV, (GLuint index , GLsizei n , const GLhalfNV * v ), (index, n, v)) \
	END()
#else
#define EXTENSION_GL_NV_half_float(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_light_max_exponent
#define GL_NV_light_max_exponent 1
#define EXTENSION_GL_NV_light_max_exponent(NAME, FUNC, CONST, END) \
	NAME(GL_NV_light_max_exponent) \
	CONST(int, GL_MAX_SHININESS_NV, 0x8504) \
	CONST(int, GL_MAX_SPOT_EXPONENT_NV, 0x8505) \
	END()
#else
#define EXTENSION_GL_NV_light_max_exponent(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_multisample_coverage
#define GL_NV_multisample_coverage 1
#define EXTENSION_GL_NV_multisample_coverage(NAME, FUNC, CONST, END) \
	NAME(GL_NV_multisample_coverage) \
	CONST(int, GL_COVERAGE_SAMPLES_NV, 0x80A9) \
	CONST(int, GL_COLOR_SAMPLES_NV, 0x8E20) \
	END()
#else
#define EXTENSION_GL_NV_multisample_coverage(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_multisample_filter_hint
#define GL_NV_multisample_filter_hint 1
#define EXTENSION_GL_NV_multisample_filter_hint(NAME, FUNC, CONST, END) \
	NAME(GL_NV_multisample_filter_hint) \
	CONST(int, GL_MULTISAMPLE_FILTER_HINT_NV, 0x8534) \
	END()
#else
#define EXTENSION_GL_NV_multisample_filter_hint(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_occlusion_query
#define GL_NV_occlusion_query 1
#define EXTENSION_GL_NV_occlusion_query(NAME, FUNC, CONST, END) \
	NAME(GL_NV_occlusion_query) \
	CONST(int, GL_PIXEL_COUNTER_BITS_NV, 0x8864) \
	CONST(int, GL_CURRENT_OCCLUSION_QUERY_ID_NV, 0x8865) \
	CONST(int, GL_PIXEL_COUNT_NV, 0x8866) \
	CONST(int, GL_PIXEL_COUNT_AVAILABLE_NV, 0x8867) \
	FUNC(void , glGenOcclusionQueriesNV, GLGENOCCLUSIONQUERIESNV, (GLsizei n , GLuint * ids ), (n, ids)) \
	FUNC(void , glDeleteOcclusionQueriesNV, GLDELETEOCCLUSIONQUERIESNV, (GLsizei n , const GLuint * ids ), (n, ids)) \
	FUNC(GLboolean , glIsOcclusionQueryNV, GLISOCCLUSIONQUERYNV, (GLuint id ), (id)) \
	FUNC(void , glBeginOcclusionQueryNV, GLBEGINOCCLUSIONQUERYNV, (GLuint id ), (id)) \
	FUNC(void , glEndOcclusionQueryNV, GLENDOCCLUSIONQUERYNV, (void ), ()) \
	FUNC(void , glGetOcclusionQueryivNV, GLGETOCCLUSIONQUERYIVNV, (GLuint id , GLenum pname , GLint * params ), (id, pname, params)) \
	FUNC(void , glGetOcclusionQueryuivNV, GLGETOCCLUSIONQUERYUIVNV, (GLuint id , GLenum pname , GLuint * params ), (id, pname, params)) \
	END()
#else
#define EXTENSION_GL_NV_occlusion_query(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_packed_depth_stencil
#define GL_NV_packed_depth_stencil 1
#define EXTENSION_GL_NV_packed_depth_stencil(NAME, FUNC, CONST, END) \
	NAME(GL_NV_packed_depth_stencil) \
	CONST(int, GL_DEPTH_STENCIL_NV, 0x84F9) \
	CONST(int, GL_UNSIGNED_INT_24_8_NV, 0x84FA) \
	END()
#else
#define EXTENSION_GL_NV_packed_depth_stencil(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_parameter_buffer_object
#define GL_NV_parameter_buffer_object 1
#define EXTENSION_GL_NV_parameter_buffer_object(NAME, FUNC, CONST, END) \
	NAME(GL_NV_parameter_buffer_object) \
	CONST(int, GL_MAX_PROGRAM_PARAMETER_BUFFER_BINDINGS_NV, 0x8DA0) \
	CONST(int, GL_MAX_PROGRAM_PARAMETER_BUFFER_SIZE_NV, 0x8DA1) \
	CONST(int, GL_VERTEX_PROGRAM_PARAMETER_BUFFER_NV, 0x8DA2) \
	CONST(int, GL_GEOMETRY_PROGRAM_PARAMETER_BUFFER_NV, 0x8DA3) \
	CONST(int, GL_FRAGMENT_PROGRAM_PARAMETER_BUFFER_NV, 0x8DA4) \
	FUNC(void , glProgramBufferParametersfvNV, GLPROGRAMBUFFERPARAMETERSFVNV, (GLenum target , GLuint buffer , GLuint index , GLsizei count , const GLfloat * params ), (target, buffer, index, count, params)) \
	FUNC(void , glProgramBufferParametersIivNV, GLPROGRAMBUFFERPARAMETERSIIVNV, (GLenum target , GLuint buffer , GLuint index , GLsizei count , const GLint * params ), (target, buffer, index, count, params)) \
	FUNC(void , glProgramBufferParametersIuivNV, GLPROGRAMBUFFERPARAMETERSIUIVNV, (GLenum target , GLuint buffer , GLuint index , GLsizei count , const GLuint * params ), (target, buffer, index, count, params)) \
	END()
#else
#define EXTENSION_GL_NV_parameter_buffer_object(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_parameter_buffer_object2
#define GL_NV_parameter_buffer_object2 1
#define EXTENSION_GL_NV_parameter_buffer_object2(NAME, FUNC, CONST, END) \
	NAME(GL_NV_parameter_buffer_object2) \
	END()
#else
#define EXTENSION_GL_NV_parameter_buffer_object2(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_pixel_data_range
#define GL_NV_pixel_data_range 1
#define EXTENSION_GL_NV_pixel_data_range(NAME, FUNC, CONST, END) \
	NAME(GL_NV_pixel_data_range) \
	CONST(int, GL_WRITE_PIXEL_DATA_RANGE_NV, 0x8878) \
	CONST(int, GL_READ_PIXEL_DATA_RANGE_NV, 0x8879) \
	CONST(int, GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV, 0x887A) \
	CONST(int, GL_READ_PIXEL_DATA_RANGE_LENGTH_NV, 0x887B) \
	CONST(int, GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV, 0x887C) \
	CONST(int, GL_READ_PIXEL_DATA_RANGE_POINTER_NV, 0x887D) \
	FUNC(void , glPixelDataRangeNV, GLPIXELDATARANGENV, (GLenum target , GLsizei length , GLvoid * pointer ), (target, length, pointer)) \
	FUNC(void , glFlushPixelDataRangeNV, GLFLUSHPIXELDATARANGENV, (GLenum target ), (target)) \
	END()
#else
#define EXTENSION_GL_NV_pixel_data_range(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_point_sprite
#define GL_NV_point_sprite 1
#define EXTENSION_GL_NV_point_sprite(NAME, FUNC, CONST, END) \
	NAME(GL_NV_point_sprite) \
	CONST(int, GL_POINT_SPRITE_NV, 0x8861) \
	CONST(int, GL_COORD_REPLACE_NV, 0x8862) \
	CONST(int, GL_POINT_SPRITE_R_MODE_NV, 0x8863) \
	FUNC(void , glPointParameteriNV, GLPOINTPARAMETERINV, (GLenum pname , GLint param ), (pname, param)) \
	FUNC(void , glPointParameterivNV, GLPOINTPARAMETERIVNV, (GLenum pname , const GLint * params ), (pname, params)) \
	END()
#else
#define EXTENSION_GL_NV_point_sprite(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_present_video
#define GL_NV_present_video 1
#define EXTENSION_GL_NV_present_video(NAME, FUNC, CONST, END) \
	NAME(GL_NV_present_video) \
	CONST(int, GL_FRAME_NV, 0x8E26) \
	CONST(int, GL_FIELDS_NV, 0x8E27) \
	CONST(int, GL_CURRENT_TIME_NV, 0x8E28) \
	CONST(int, GL_NUM_FILL_STREAMS_NV, 0x8E29) \
	CONST(int, GL_PRESENT_TIME_NV, 0x8E2A) \
	CONST(int, GL_PRESENT_DURATION_NV, 0x8E2B) \
	FUNC(void , glPresentFrameKeyedNV, GLPRESENTFRAMEKEYEDNV, (GLuint video_slot , GLuint64EXT minPresentTime , GLuint beginPresentTimeId , GLuint presentDurationId , GLenum type , GLenum target0 , GLuint fill0 , GLuint key0 , GLenum target1 , GLuint fill1 , GLuint key1 ), (video_slot, minPresentTime, beginPresentTimeId, presentDurationId, type, target0, fill0, key0, target1, fill1, key1)) \
	FUNC(void , glPresentFrameDualFillNV, GLPRESENTFRAMEDUALFILLNV, (GLuint video_slot , GLuint64EXT minPresentTime , GLuint beginPresentTimeId , GLuint presentDurationId , GLenum type , GLenum target0 , GLuint fill0 , GLenum target1 , GLuint fill1 , GLenum target2 , GLuint fill2 , GLenum target3 , GLuint fill3 ), (video_slot, minPresentTime, beginPresentTimeId, presentDurationId, type, target0, fill0, target1, fill1, target2, fill2, target3, fill3)) \
	FUNC(void , glGetVideoivNV, GLGETVIDEOIVNV, (GLuint video_slot , GLenum pname , GLint * params ), (video_slot, pname, params)) \
	FUNC(void , glGetVideouivNV, GLGETVIDEOUIVNV, (GLuint video_slot , GLenum pname , GLuint * params ), (video_slot, pname, params)) \
	FUNC(void , glGetVideoi64vNV, GLGETVIDEOI64VNV, (GLuint video_slot , GLenum pname , GLint64EXT * params ), (video_slot, pname, params)) \
	FUNC(void , glGetVideoui64vNV, GLGETVIDEOUI64VNV, (GLuint video_slot , GLenum pname , GLuint64EXT * params ), (video_slot, pname, params)) \
	END()
#else
#define EXTENSION_GL_NV_present_video(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_primitive_restart
#define GL_NV_primitive_restart 1
#define EXTENSION_GL_NV_primitive_restart(NAME, FUNC, CONST, END) \
	NAME(GL_NV_primitive_restart) \
	CONST(int, GL_PRIMITIVE_RESTART_NV, 0x8558) \
	CONST(int, GL_PRIMITIVE_RESTART_INDEX_NV, 0x8559) \
	FUNC(void , glPrimitiveRestartNV, GLPRIMITIVERESTARTNV, (void ), ()) \
	FUNC(void , glPrimitiveRestartIndexNV, GLPRIMITIVERESTARTINDEXNV, (GLuint index ), (index)) \
	END()
#else
#define EXTENSION_GL_NV_primitive_restart(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_register_combiners
#define GL_NV_register_combiners 1
#define EXTENSION_GL_NV_register_combiners(NAME, FUNC, CONST, END) \
	NAME(GL_NV_register_combiners) \
	CONST(int, GL_REGISTER_COMBINERS_NV, 0x8522) \
	CONST(int, GL_VARIABLE_A_NV, 0x8523) \
	CONST(int, GL_VARIABLE_B_NV, 0x8524) \
	CONST(int, GL_VARIABLE_C_NV, 0x8525) \
	CONST(int, GL_VARIABLE_D_NV, 0x8526) \
	CONST(int, GL_VARIABLE_E_NV, 0x8527) \
	CONST(int, GL_VARIABLE_F_NV, 0x8528) \
	CONST(int, GL_VARIABLE_G_NV, 0x8529) \
	CONST(int, GL_CONSTANT_COLOR0_NV, 0x852A) \
	CONST(int, GL_CONSTANT_COLOR1_NV, 0x852B) \
	CONST(int, GL_PRIMARY_COLOR_NV, 0x852C) \
	CONST(int, GL_SECONDARY_COLOR_NV, 0x852D) \
	CONST(int, GL_SPARE0_NV, 0x852E) \
	CONST(int, GL_SPARE1_NV, 0x852F) \
	CONST(int, GL_DISCARD_NV, 0x8530) \
	CONST(int, GL_E_TIMES_F_NV, 0x8531) \
	CONST(int, GL_SPARE0_PLUS_SECONDARY_COLOR_NV, 0x8532) \
	CONST(int, GL_UNSIGNED_IDENTITY_NV, 0x8536) \
	CONST(int, GL_UNSIGNED_INVERT_NV, 0x8537) \
	CONST(int, GL_EXPAND_NORMAL_NV, 0x8538) \
	CONST(int, GL_EXPAND_NEGATE_NV, 0x8539) \
	CONST(int, GL_HALF_BIAS_NORMAL_NV, 0x853A) \
	CONST(int, GL_HALF_BIAS_NEGATE_NV, 0x853B) \
	CONST(int, GL_SIGNED_IDENTITY_NV, 0x853C) \
	CONST(int, GL_SIGNED_NEGATE_NV, 0x853D) \
	CONST(int, GL_SCALE_BY_TWO_NV, 0x853E) \
	CONST(int, GL_SCALE_BY_FOUR_NV, 0x853F) \
	CONST(int, GL_SCALE_BY_ONE_HALF_NV, 0x8540) \
	CONST(int, GL_BIAS_BY_NEGATIVE_ONE_HALF_NV, 0x8541) \
	CONST(int, GL_COMBINER_INPUT_NV, 0x8542) \
	CONST(int, GL_COMBINER_MAPPING_NV, 0x8543) \
	CONST(int, GL_COMBINER_COMPONENT_USAGE_NV, 0x8544) \
	CONST(int, GL_COMBINER_AB_DOT_PRODUCT_NV, 0x8545) \
	CONST(int, GL_COMBINER_CD_DOT_PRODUCT_NV, 0x8546) \
	CONST(int, GL_COMBINER_MUX_SUM_NV, 0x8547) \
	CONST(int, GL_COMBINER_SCALE_NV, 0x8548) \
	CONST(int, GL_COMBINER_BIAS_NV, 0x8549) \
	CONST(int, GL_COMBINER_AB_OUTPUT_NV, 0x854A) \
	CONST(int, GL_COMBINER_CD_OUTPUT_NV, 0x854B) \
	CONST(int, GL_COMBINER_SUM_OUTPUT_NV, 0x854C) \
	CONST(int, GL_MAX_GENERAL_COMBINERS_NV, 0x854D) \
	CONST(int, GL_NUM_GENERAL_COMBINERS_NV, 0x854E) \
	CONST(int, GL_COLOR_SUM_CLAMP_NV, 0x854F) \
	CONST(int, GL_COMBINER0_NV, 0x8550) \
	CONST(int, GL_COMBINER1_NV, 0x8551) \
	CONST(int, GL_COMBINER2_NV, 0x8552) \
	CONST(int, GL_COMBINER3_NV, 0x8553) \
	CONST(int, GL_COMBINER4_NV, 0x8554) \
	CONST(int, GL_COMBINER5_NV, 0x8555) \
	CONST(int, GL_COMBINER6_NV, 0x8556) \
	CONST(int, GL_COMBINER7_NV, 0x8557) \
	FUNC(void , glCombinerParameterfvNV, GLCOMBINERPARAMETERFVNV, (GLenum pname , const GLfloat * params ), (pname, params)) \
	FUNC(void , glCombinerParameterfNV, GLCOMBINERPARAMETERFNV, (GLenum pname , GLfloat param ), (pname, param)) \
	FUNC(void , glCombinerParameterivNV, GLCOMBINERPARAMETERIVNV, (GLenum pname , const GLint * params ), (pname, params)) \
	FUNC(void , glCombinerParameteriNV, GLCOMBINERPARAMETERINV, (GLenum pname , GLint param ), (pname, param)) \
	FUNC(void , glCombinerInputNV, GLCOMBINERINPUTNV, (GLenum stage , GLenum portion , GLenum variable , GLenum input , GLenum mapping , GLenum componentUsage ), (stage, portion, variable, input, mapping, componentUsage)) \
	FUNC(void , glCombinerOutputNV, GLCOMBINEROUTPUTNV, (GLenum stage , GLenum portion , GLenum abOutput , GLenum cdOutput , GLenum sumOutput , GLenum scale , GLenum bias , GLboolean abDotProduct , GLboolean cdDotProduct , GLboolean muxSum ), (stage, portion, abOutput, cdOutput, sumOutput, scale, bias, abDotProduct, cdDotProduct, muxSum)) \
	FUNC(void , glFinalCombinerInputNV, GLFINALCOMBINERINPUTNV, (GLenum variable , GLenum input , GLenum mapping , GLenum componentUsage ), (variable, input, mapping, componentUsage)) \
	FUNC(void , glGetCombinerInputParameterfvNV, GLGETCOMBINERINPUTPARAMETERFVNV, (GLenum stage , GLenum portion , GLenum variable , GLenum pname , GLfloat * params ), (stage, portion, variable, pname, params)) \
	FUNC(void , glGetCombinerInputParameterivNV, GLGETCOMBINERINPUTPARAMETERIVNV, (GLenum stage , GLenum portion , GLenum variable , GLenum pname , GLint * params ), (stage, portion, variable, pname, params)) \
	FUNC(void , glGetCombinerOutputParameterfvNV, GLGETCOMBINEROUTPUTPARAMETERFVNV, (GLenum stage , GLenum portion , GLenum pname , GLfloat * params ), (stage, portion, pname, params)) \
	FUNC(void , glGetCombinerOutputParameterivNV, GLGETCOMBINEROUTPUTPARAMETERIVNV, (GLenum stage , GLenum portion , GLenum pname , GLint * params ), (stage, portion, pname, params)) \
	FUNC(void , glGetFinalCombinerInputParameterfvNV, GLGETFINALCOMBINERINPUTPARAMETERFVNV, (GLenum variable , GLenum pname , GLfloat * params ), (variable, pname, params)) \
	FUNC(void , glGetFinalCombinerInputParameterivNV, GLGETFINALCOMBINERINPUTPARAMETERIVNV, (GLenum variable , GLenum pname , GLint * params ), (variable, pname, params)) \
	END()
#else
#define EXTENSION_GL_NV_register_combiners(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_register_combiners2
#define GL_NV_register_combiners2 1
#define EXTENSION_GL_NV_register_combiners2(NAME, FUNC, CONST, END) \
	NAME(GL_NV_register_combiners2) \
	CONST(int, GL_PER_STAGE_CONSTANTS_NV, 0x8535) \
	FUNC(void , glCombinerStageParameterfvNV, GLCOMBINERSTAGEPARAMETERFVNV, (GLenum stage , GLenum pname , const GLfloat * params ), (stage, pname, params)) \
	FUNC(void , glGetCombinerStageParameterfvNV, GLGETCOMBINERSTAGEPARAMETERFVNV, (GLenum stage , GLenum pname , GLfloat * params ), (stage, pname, params)) \
	END()
#else
#define EXTENSION_GL_NV_register_combiners2(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_shader_buffer_load
#define GL_NV_shader_buffer_load 1
#define EXTENSION_GL_NV_shader_buffer_load(NAME, FUNC, CONST, END) \
	NAME(GL_NV_shader_buffer_load) \
	CONST(int, GL_BUFFER_GPU_ADDRESS_NV, 0x8F1D) \
	CONST(int, GL_GPU_ADDRESS_NV, 0x8F34) \
	CONST(int, GL_MAX_SHADER_BUFFER_ADDRESS_NV, 0x8F35) \
	FUNC(void , glMakeBufferResidentNV, GLMAKEBUFFERRESIDENTNV, (GLenum target , GLenum access ), (target, access)) \
	FUNC(void , glMakeBufferNonResidentNV, GLMAKEBUFFERNONRESIDENTNV, (GLenum target ), (target)) \
	FUNC(GLboolean , glIsBufferResidentNV, GLISBUFFERRESIDENTNV, (GLenum target ), (target)) \
	FUNC(void , glMakeNamedBufferResidentNV, GLMAKENAMEDBUFFERRESIDENTNV, (GLuint buffer , GLenum access ), (buffer, access)) \
	FUNC(void , glMakeNamedBufferNonResidentNV, GLMAKENAMEDBUFFERNONRESIDENTNV, (GLuint buffer ), (buffer)) \
	FUNC(GLboolean , glIsNamedBufferResidentNV, GLISNAMEDBUFFERRESIDENTNV, (GLuint buffer ), (buffer)) \
	FUNC(void , glGetBufferParameterui64vNV, GLGETBUFFERPARAMETERUI64VNV, (GLenum target , GLenum pname , GLuint64EXT * params ), (target, pname, params)) \
	FUNC(void , glGetNamedBufferParameterui64vNV, GLGETNAMEDBUFFERPARAMETERUI64VNV, (GLuint buffer , GLenum pname , GLuint64EXT * params ), (buffer, pname, params)) \
	FUNC(void , glGetIntegerui64vNV, GLGETINTEGERUI64VNV, (GLenum value , GLuint64EXT * result ), (value, result)) \
	FUNC(void , glUniformui64NV, GLUNIFORMUI64NV, (GLint location , GLuint64EXT value ), (location, value)) \
	FUNC(void , glUniformui64vNV, GLUNIFORMUI64VNV, (GLint location , GLsizei count , const GLuint64EXT * value ), (location, count, value)) \
	FUNC(void , glGetUniformui64vNV, GLGETUNIFORMUI64VNV, (GLuint program , GLint location , GLuint64EXT * params ), (program, location, params)) \
	FUNC(void , glProgramUniformui64NV, GLPROGRAMUNIFORMUI64NV, (GLuint program , GLint location , GLuint64EXT value ), (program, location, value)) \
	FUNC(void , glProgramUniformui64vNV, GLPROGRAMUNIFORMUI64VNV, (GLuint program , GLint location , GLsizei count , const GLuint64EXT * value ), (program, location, count, value)) \
	END()
#else
#define EXTENSION_GL_NV_shader_buffer_load(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_shader_buffer_store
#define GL_NV_shader_buffer_store 1
#define EXTENSION_GL_NV_shader_buffer_store(NAME, FUNC, CONST, END) \
	NAME(GL_NV_shader_buffer_store) \
	CONST(int, GL_SHADER_GLOBAL_ACCESS_BARRIER_BIT_NV, 0x00000010) \
	END()
#else
#define EXTENSION_GL_NV_shader_buffer_store(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_tessellation_program5
#define GL_NV_tessellation_program5 1
#define EXTENSION_GL_NV_tessellation_program5(NAME, FUNC, CONST, END) \
	NAME(GL_NV_tessellation_program5) \
	CONST(int, GL_MAX_PROGRAM_PATCH_ATTRIBS_NV, 0x86D8) \
	CONST(int, GL_TESS_CONTROL_PROGRAM_NV, 0x891E) \
	CONST(int, GL_TESS_EVALUATION_PROGRAM_NV, 0x891F) \
	CONST(int, GL_TESS_CONTROL_PROGRAM_PARAMETER_BUFFER_NV, 0x8C74) \
	CONST(int, GL_TESS_EVALUATION_PROGRAM_PARAMETER_BUFFER_NV, 0x8C75) \
	END()
#else
#define EXTENSION_GL_NV_tessellation_program5(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_texgen_emboss
#define GL_NV_texgen_emboss 1
#define EXTENSION_GL_NV_texgen_emboss(NAME, FUNC, CONST, END) \
	NAME(GL_NV_texgen_emboss) \
	CONST(int, GL_EMBOSS_LIGHT_NV, 0x855D) \
	CONST(int, GL_EMBOSS_CONSTANT_NV, 0x855E) \
	CONST(int, GL_EMBOSS_MAP_NV, 0x855F) \
	END()
#else
#define EXTENSION_GL_NV_texgen_emboss(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_texgen_reflection
#define GL_NV_texgen_reflection 1
#define EXTENSION_GL_NV_texgen_reflection(NAME, FUNC, CONST, END) \
	NAME(GL_NV_texgen_reflection) \
	CONST(int, GL_NORMAL_MAP_NV, 0x8511) \
	CONST(int, GL_REFLECTION_MAP_NV, 0x8512) \
	END()
#else
#define EXTENSION_GL_NV_texgen_reflection(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_texture_barrier
#define GL_NV_texture_barrier 1
#define EXTENSION_GL_NV_texture_barrier(NAME, FUNC, CONST, END) \
	NAME(GL_NV_texture_barrier) \
	FUNC(void , glTextureBarrierNV, GLTEXTUREBARRIERNV, (void ), ()) \
	END()
#else
#define EXTENSION_GL_NV_texture_barrier(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_texture_compression_vtc
#define GL_NV_texture_compression_vtc 1
#define EXTENSION_GL_NV_texture_compression_vtc(NAME, FUNC, CONST, END) \
	NAME(GL_NV_texture_compression_vtc) \
	END()
#else
#define EXTENSION_GL_NV_texture_compression_vtc(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_texture_env_combine4
#define GL_NV_texture_env_combine4 1
#define EXTENSION_GL_NV_texture_env_combine4(NAME, FUNC, CONST, END) \
	NAME(GL_NV_texture_env_combine4) \
	CONST(int, GL_COMBINE4_NV, 0x8503) \
	CONST(int, GL_SOURCE3_RGB_NV, 0x8583) \
	CONST(int, GL_SOURCE3_ALPHA_NV, 0x858B) \
	CONST(int, GL_OPERAND3_RGB_NV, 0x8593) \
	CONST(int, GL_OPERAND3_ALPHA_NV, 0x859B) \
	END()
#else
#define EXTENSION_GL_NV_texture_env_combine4(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_texture_expand_normal
#define GL_NV_texture_expand_normal 1
#define EXTENSION_GL_NV_texture_expand_normal(NAME, FUNC, CONST, END) \
	NAME(GL_NV_texture_expand_normal) \
	CONST(int, GL_TEXTURE_UNSIGNED_REMAP_MODE_NV, 0x888F) \
	END()
#else
#define EXTENSION_GL_NV_texture_expand_normal(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_texture_rectangle
#define GL_NV_texture_rectangle 1
#define EXTENSION_GL_NV_texture_rectangle(NAME, FUNC, CONST, END) \
	NAME(GL_NV_texture_rectangle) \
	CONST(int, GL_TEXTURE_RECTANGLE_NV, 0x84F5) \
	CONST(int, GL_TEXTURE_BINDING_RECTANGLE_NV, 0x84F6) \
	CONST(int, GL_PROXY_TEXTURE_RECTANGLE_NV, 0x84F7) \
	CONST(int, GL_MAX_RECTANGLE_TEXTURE_SIZE_NV, 0x84F8) \
	END()
#else
#define EXTENSION_GL_NV_texture_rectangle(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_texture_shader
#define GL_NV_texture_shader 1
#define EXTENSION_GL_NV_texture_shader(NAME, FUNC, CONST, END) \
	NAME(GL_NV_texture_shader) \
	CONST(int, GL_OFFSET_TEXTURE_RECTANGLE_NV, 0x864C) \
	CONST(int, GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV, 0x864D) \
	CONST(int, GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV, 0x864E) \
	CONST(int, GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV, 0x86D9) \
	CONST(int, GL_UNSIGNED_INT_S8_S8_8_8_NV, 0x86DA) \
	CONST(int, GL_UNSIGNED_INT_8_8_S8_S8_REV_NV, 0x86DB) \
	CONST(int, GL_DSDT_MAG_INTENSITY_NV, 0x86DC) \
	CONST(int, GL_SHADER_CONSISTENT_NV, 0x86DD) \
	CONST(int, GL_TEXTURE_SHADER_NV, 0x86DE) \
	CONST(int, GL_SHADER_OPERATION_NV, 0x86DF) \
	CONST(int, GL_CULL_MODES_NV, 0x86E0) \
	CONST(int, GL_OFFSET_TEXTURE_MATRIX_NV, 0x86E1) \
	CONST(int, GL_OFFSET_TEXTURE_SCALE_NV, 0x86E2) \
	CONST(int, GL_OFFSET_TEXTURE_BIAS_NV, 0x86E3) \
	CONST(int, GL_OFFSET_TEXTURE_2D_MATRIX_NV, 0x86E1) \
	CONST(int, GL_OFFSET_TEXTURE_2D_SCALE_NV, 0x86E2) \
	CONST(int, GL_OFFSET_TEXTURE_2D_BIAS_NV, 0x86E3) \
	CONST(int, GL_PREVIOUS_TEXTURE_INPUT_NV, 0x86E4) \
	CONST(int, GL_CONST_EYE_NV, 0x86E5) \
	CONST(int, GL_PASS_THROUGH_NV, 0x86E6) \
	CONST(int, GL_CULL_FRAGMENT_NV, 0x86E7) \
	CONST(int, GL_OFFSET_TEXTURE_2D_NV, 0x86E8) \
	CONST(int, GL_DEPENDENT_AR_TEXTURE_2D_NV, 0x86E9) \
	CONST(int, GL_DEPENDENT_GB_TEXTURE_2D_NV, 0x86EA) \
	CONST(int, GL_DOT_PRODUCT_NV, 0x86EC) \
	CONST(int, GL_DOT_PRODUCT_DEPTH_REPLACE_NV, 0x86ED) \
	CONST(int, GL_DOT_PRODUCT_TEXTURE_2D_NV, 0x86EE) \
	CONST(int, GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV, 0x86F0) \
	CONST(int, GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV, 0x86F1) \
	CONST(int, GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV, 0x86F2) \
	CONST(int, GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV, 0x86F3) \
	CONST(int, GL_HILO_NV, 0x86F4) \
	CONST(int, GL_DSDT_NV, 0x86F5) \
	CONST(int, GL_DSDT_MAG_NV, 0x86F6) \
	CONST(int, GL_DSDT_MAG_VIB_NV, 0x86F7) \
	CONST(int, GL_HILO16_NV, 0x86F8) \
	CONST(int, GL_SIGNED_HILO_NV, 0x86F9) \
	CONST(int, GL_SIGNED_HILO16_NV, 0x86FA) \
	CONST(int, GL_SIGNED_RGBA_NV, 0x86FB) \
	CONST(int, GL_SIGNED_RGBA8_NV, 0x86FC) \
	CONST(int, GL_SIGNED_RGB_NV, 0x86FE) \
	CONST(int, GL_SIGNED_RGB8_NV, 0x86FF) \
	CONST(int, GL_SIGNED_LUMINANCE_NV, 0x8701) \
	CONST(int, GL_SIGNED_LUMINANCE8_NV, 0x8702) \
	CONST(int, GL_SIGNED_LUMINANCE_ALPHA_NV, 0x8703) \
	CONST(int, GL_SIGNED_LUMINANCE8_ALPHA8_NV, 0x8704) \
	CONST(int, GL_SIGNED_ALPHA_NV, 0x8705) \
	CONST(int, GL_SIGNED_ALPHA8_NV, 0x8706) \
	CONST(int, GL_SIGNED_INTENSITY_NV, 0x8707) \
	CONST(int, GL_SIGNED_INTENSITY8_NV, 0x8708) \
	CONST(int, GL_DSDT8_NV, 0x8709) \
	CONST(int, GL_DSDT8_MAG8_NV, 0x870A) \
	CONST(int, GL_DSDT8_MAG8_INTENSITY8_NV, 0x870B) \
	CONST(int, GL_SIGNED_RGB_UNSIGNED_ALPHA_NV, 0x870C) \
	CONST(int, GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV, 0x870D) \
	CONST(int, GL_HI_SCALE_NV, 0x870E) \
	CONST(int, GL_LO_SCALE_NV, 0x870F) \
	CONST(int, GL_DS_SCALE_NV, 0x8710) \
	CONST(int, GL_DT_SCALE_NV, 0x8711) \
	CONST(int, GL_MAGNITUDE_SCALE_NV, 0x8712) \
	CONST(int, GL_VIBRANCE_SCALE_NV, 0x8713) \
	CONST(int, GL_HI_BIAS_NV, 0x8714) \
	CONST(int, GL_LO_BIAS_NV, 0x8715) \
	CONST(int, GL_DS_BIAS_NV, 0x8716) \
	CONST(int, GL_DT_BIAS_NV, 0x8717) \
	CONST(int, GL_MAGNITUDE_BIAS_NV, 0x8718) \
	CONST(int, GL_VIBRANCE_BIAS_NV, 0x8719) \
	CONST(int, GL_TEXTURE_BORDER_VALUES_NV, 0x871A) \
	CONST(int, GL_TEXTURE_HI_SIZE_NV, 0x871B) \
	CONST(int, GL_TEXTURE_LO_SIZE_NV, 0x871C) \
	CONST(int, GL_TEXTURE_DS_SIZE_NV, 0x871D) \
	CONST(int, GL_TEXTURE_DT_SIZE_NV, 0x871E) \
	CONST(int, GL_TEXTURE_MAG_SIZE_NV, 0x871F) \
	END()
#else
#define EXTENSION_GL_NV_texture_shader(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_texture_shader2
#define GL_NV_texture_shader2 1
#define EXTENSION_GL_NV_texture_shader2(NAME, FUNC, CONST, END) \
	NAME(GL_NV_texture_shader2) \
	CONST(int, GL_DOT_PRODUCT_TEXTURE_3D_NV, 0x86EF) \
	END()
#else
#define EXTENSION_GL_NV_texture_shader2(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_texture_shader3
#define GL_NV_texture_shader3 1
#define EXTENSION_GL_NV_texture_shader3(NAME, FUNC, CONST, END) \
	NAME(GL_NV_texture_shader3) \
	CONST(int, GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV, 0x8850) \
	CONST(int, GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV, 0x8851) \
	CONST(int, GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV, 0x8852) \
	CONST(int, GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV, 0x8853) \
	CONST(int, GL_OFFSET_HILO_TEXTURE_2D_NV, 0x8854) \
	CONST(int, GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV, 0x8855) \
	CONST(int, GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV, 0x8856) \
	CONST(int, GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV, 0x8857) \
	CONST(int, GL_DEPENDENT_HILO_TEXTURE_2D_NV, 0x8858) \
	CONST(int, GL_DEPENDENT_RGB_TEXTURE_3D_NV, 0x8859) \
	CONST(int, GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV, 0x885A) \
	CONST(int, GL_DOT_PRODUCT_PASS_THROUGH_NV, 0x885B) \
	CONST(int, GL_DOT_PRODUCT_TEXTURE_1D_NV, 0x885C) \
	CONST(int, GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV, 0x885D) \
	CONST(int, GL_HILO8_NV, 0x885E) \
	CONST(int, GL_SIGNED_HILO8_NV, 0x885F) \
	CONST(int, GL_FORCE_BLUE_TO_ONE_NV, 0x8860) \
	END()
#else
#define EXTENSION_GL_NV_texture_shader3(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_transform_feedback
#define GL_NV_transform_feedback 1
#define EXTENSION_GL_NV_transform_feedback(NAME, FUNC, CONST, END) \
	NAME(GL_NV_transform_feedback) \
	CONST(int, GL_BACK_PRIMARY_COLOR_NV, 0x8C77) \
	CONST(int, GL_BACK_SECONDARY_COLOR_NV, 0x8C78) \
	CONST(int, GL_TEXTURE_COORD_NV, 0x8C79) \
	CONST(int, GL_CLIP_DISTANCE_NV, 0x8C7A) \
	CONST(int, GL_VERTEX_ID_NV, 0x8C7B) \
	CONST(int, GL_PRIMITIVE_ID_NV, 0x8C7C) \
	CONST(int, GL_GENERIC_ATTRIB_NV, 0x8C7D) \
	CONST(int, GL_TRANSFORM_FEEDBACK_ATTRIBS_NV, 0x8C7E) \
	CONST(int, GL_TRANSFORM_FEEDBACK_BUFFER_MODE_NV, 0x8C7F) \
	CONST(int, GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_NV, 0x8C80) \
	CONST(int, GL_ACTIVE_VARYINGS_NV, 0x8C81) \
	CONST(int, GL_ACTIVE_VARYING_MAX_LENGTH_NV, 0x8C82) \
	CONST(int, GL_TRANSFORM_FEEDBACK_VARYINGS_NV, 0x8C83) \
	CONST(int, GL_TRANSFORM_FEEDBACK_BUFFER_START_NV, 0x8C84) \
	CONST(int, GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_NV, 0x8C85) \
	CONST(int, GL_TRANSFORM_FEEDBACK_RECORD_NV, 0x8C86) \
	CONST(int, GL_PRIMITIVES_GENERATED_NV, 0x8C87) \
	CONST(int, GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV, 0x8C88) \
	CONST(int, GL_RASTERIZER_DISCARD_NV, 0x8C89) \
	CONST(int, GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_ATTRIBS_NV, 0x8C8A) \
	CONST(int, GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV, 0x8C8B) \
	CONST(int, GL_INTERLEAVED_ATTRIBS_NV, 0x8C8C) \
	CONST(int, GL_SEPARATE_ATTRIBS_NV, 0x8C8D) \
	CONST(int, GL_TRANSFORM_FEEDBACK_BUFFER_NV, 0x8C8E) \
	CONST(int, GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_NV, 0x8C8F) \
	CONST(int, GL_LAYER_NV, 0x8DAA) \
	CONST(int, GL_NEXT_BUFFER_NV, -2) \
	CONST(int, GL_SKIP_COMPONENTS4_NV, -3) \
	CONST(int, GL_SKIP_COMPONENTS3_NV, -4) \
	CONST(int, GL_SKIP_COMPONENTS2_NV, -5) \
	CONST(int, GL_SKIP_COMPONENTS1_NV, -6) \
	FUNC(void , glBeginTransformFeedbackNV, GLBEGINTRANSFORMFEEDBACKNV, (GLenum primitiveMode ), (primitiveMode)) \
	FUNC(void , glEndTransformFeedbackNV, GLENDTRANSFORMFEEDBACKNV, (void ), ()) \
	FUNC(void , glTransformFeedbackAttribsNV, GLTRANSFORMFEEDBACKATTRIBSNV, (GLuint count , const GLint * attribs , GLenum bufferMode ), (count, attribs, bufferMode)) \
	FUNC(void , glBindBufferRangeNV, GLBINDBUFFERRANGENV, (GLenum target , GLuint index , GLuint buffer , GLintptr offset , GLsizeiptr size ), (target, index, buffer, offset, size)) \
	FUNC(void , glBindBufferOffsetNV, GLBINDBUFFEROFFSETNV, (GLenum target , GLuint index , GLuint buffer , GLintptr offset ), (target, index, buffer, offset)) \
	FUNC(void , glBindBufferBaseNV, GLBINDBUFFERBASENV, (GLenum target , GLuint index , GLuint buffer ), (target, index, buffer)) \
	FUNC(void , glTransformFeedbackVaryingsNV, GLTRANSFORMFEEDBACKVARYINGSNV, (GLuint program , GLsizei count , const GLint * locations , GLenum bufferMode ), (program, count, locations, bufferMode)) \
	FUNC(void , glActiveVaryingNV, GLACTIVEVARYINGNV, (GLuint program , const GLchar * name ), (program, name)) \
	FUNC(GLint , glGetVaryingLocationNV, GLGETVARYINGLOCATIONNV, (GLuint program , const GLchar * name ), (program, name)) \
	FUNC(void , glGetActiveVaryingNV, GLGETACTIVEVARYINGNV, (GLuint program , GLuint index , GLsizei bufSize , GLsizei * length , GLsizei * size , GLenum * type , GLchar * name ), (program, index, bufSize, length, size, type, name)) \
	FUNC(void , glGetTransformFeedbackVaryingNV, GLGETTRANSFORMFEEDBACKVARYINGNV, (GLuint program , GLuint index , GLint * location ), (program, index, location)) \
	FUNC(void , glTransformFeedbackStreamAttribsNV, GLTRANSFORMFEEDBACKSTREAMATTRIBSNV, (GLsizei count , const GLint * attribs , GLsizei nbuffers , const GLint * bufstreams , GLenum bufferMode ), (count, attribs, nbuffers, bufstreams, bufferMode)) \
	END()
#else
#define EXTENSION_GL_NV_transform_feedback(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_transform_feedback2
#define GL_NV_transform_feedback2 1
#define EXTENSION_GL_NV_transform_feedback2(NAME, FUNC, CONST, END) \
	NAME(GL_NV_transform_feedback2) \
	CONST(int, GL_TRANSFORM_FEEDBACK_NV, 0x8E22) \
	CONST(int, GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED_NV, 0x8E23) \
	CONST(int, GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE_NV, 0x8E24) \
	CONST(int, GL_TRANSFORM_FEEDBACK_BINDING_NV, 0x8E25) \
	FUNC(void , glBindTransformFeedbackNV, GLBINDTRANSFORMFEEDBACKNV, (GLenum target , GLuint id ), (target, id)) \
	FUNC(void , glDeleteTransformFeedbacksNV, GLDELETETRANSFORMFEEDBACKSNV, (GLsizei n , const GLuint * ids ), (n, ids)) \
	FUNC(void , glGenTransformFeedbacksNV, GLGENTRANSFORMFEEDBACKSNV, (GLsizei n , GLuint * ids ), (n, ids)) \
	FUNC(GLboolean , glIsTransformFeedbackNV, GLISTRANSFORMFEEDBACKNV, (GLuint id ), (id)) \
	FUNC(void , glPauseTransformFeedbackNV, GLPAUSETRANSFORMFEEDBACKNV, (void ), ()) \
	FUNC(void , glResumeTransformFeedbackNV, GLRESUMETRANSFORMFEEDBACKNV, (void ), ()) \
	FUNC(void , glDrawTransformFeedbackNV, GLDRAWTRANSFORMFEEDBACKNV, (GLenum mode , GLuint id ), (mode, id)) \
	END()
#else
#define EXTENSION_GL_NV_transform_feedback2(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_vdpau_interop
#define GL_NV_vdpau_interop 1
#define EXTENSION_GL_NV_vdpau_interop(NAME, FUNC, CONST, END) \
	NAME(GL_NV_vdpau_interop) \
	CONST(int, GL_SURFACE_STATE_NV, 0x86EB) \
	CONST(int, GL_SURFACE_REGISTERED_NV, 0x86FD) \
	CONST(int, GL_SURFACE_MAPPED_NV, 0x8700) \
	CONST(int, GL_WRITE_DISCARD_NV, 0x88BE) \
	FUNC(void , glVDPAUInitNV, GLVDPAUINITNV, (const GLvoid * vdpDevice , const GLvoid * getProcAddress ), (vdpDevice, getProcAddress)) \
	FUNC(void , glVDPAUFiniNV, GLVDPAUFININV, (void ), ()) \
	FUNC(GLvdpauSurfaceNV , glVDPAURegisterVideoSurfaceNV, GLVDPAUREGISTERVIDEOSURFACENV, (GLvoid * vdpSurface , GLenum target , GLsizei numTextureNames , const GLuint * textureNames ), (vdpSurface, target, numTextureNames, textureNames)) \
	FUNC(GLvdpauSurfaceNV , glVDPAURegisterOutputSurfaceNV, GLVDPAUREGISTEROUTPUTSURFACENV, (GLvoid * vdpSurface , GLenum target , GLsizei numTextureNames , const GLuint * textureNames ), (vdpSurface, target, numTextureNames, textureNames)) \
	FUNC(void , glVDPAUIsSurfaceNV, GLVDPAUISSURFACENV, (GLvdpauSurfaceNV surface ), (surface)) \
	FUNC(void , glVDPAUUnregisterSurfaceNV, GLVDPAUUNREGISTERSURFACENV, (GLvdpauSurfaceNV surface ), (surface)) \
	FUNC(void , glVDPAUGetSurfaceivNV, GLVDPAUGETSURFACEIVNV, (GLvdpauSurfaceNV surface , GLenum pname , GLsizei bufSize , GLsizei * length , GLint * values ), (surface, pname, bufSize, length, values)) \
	FUNC(void , glVDPAUSurfaceAccessNV, GLVDPAUSURFACEACCESSNV, (GLvdpauSurfaceNV surface , GLenum access ), (surface, access)) \
	FUNC(void , glVDPAUMapSurfacesNV, GLVDPAUMAPSURFACESNV, (GLsizei numSurfaces , const GLvdpauSurfaceNV * surfaces ), (numSurfaces, surfaces)) \
	FUNC(void , glVDPAUUnmapSurfacesNV, GLVDPAUUNMAPSURFACESNV, (GLsizei numSurface , const GLvdpauSurfaceNV * surfaces ), (numSurface, surfaces)) \
	END()
#else
#define EXTENSION_GL_NV_vdpau_interop(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_vertex_array_range
#define GL_NV_vertex_array_range 1
#define EXTENSION_GL_NV_vertex_array_range(NAME, FUNC, CONST, END) \
	NAME(GL_NV_vertex_array_range) \
	CONST(int, GL_VERTEX_ARRAY_RANGE_NV, 0x851D) \
	CONST(int, GL_VERTEX_ARRAY_RANGE_LENGTH_NV, 0x851E) \
	CONST(int, GL_VERTEX_ARRAY_RANGE_VALID_NV, 0x851F) \
	CONST(int, GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV, 0x8520) \
	CONST(int, GL_VERTEX_ARRAY_RANGE_POINTER_NV, 0x8521) \
	FUNC(void , glFlushVertexArrayRangeNV, GLFLUSHVERTEXARRAYRANGENV, (void ), ()) \
	FUNC(void , glVertexArrayRangeNV, GLVERTEXARRAYRANGENV, (GLsizei length , const GLvoid * pointer ), (length, pointer)) \
	END()
#else
#define EXTENSION_GL_NV_vertex_array_range(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_vertex_array_range2
#define GL_NV_vertex_array_range2 1
#define EXTENSION_GL_NV_vertex_array_range2(NAME, FUNC, CONST, END) \
	NAME(GL_NV_vertex_array_range2) \
	CONST(int, GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV, 0x8533) \
	END()
#else
#define EXTENSION_GL_NV_vertex_array_range2(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_vertex_attrib_integer_64bit
#define GL_NV_vertex_attrib_integer_64bit 1
#define EXTENSION_GL_NV_vertex_attrib_integer_64bit(NAME, FUNC, CONST, END) \
	NAME(GL_NV_vertex_attrib_integer_64bit) \
	FUNC(void , glVertexAttribL1i64NV, GLVERTEXATTRIBL1I64NV, (GLuint index , GLint64EXT x ), (index, x)) \
	FUNC(void , glVertexAttribL2i64NV, GLVERTEXATTRIBL2I64NV, (GLuint index , GLint64EXT x , GLint64EXT y ), (index, x, y)) \
	FUNC(void , glVertexAttribL3i64NV, GLVERTEXATTRIBL3I64NV, (GLuint index , GLint64EXT x , GLint64EXT y , GLint64EXT z ), (index, x, y, z)) \
	FUNC(void , glVertexAttribL4i64NV, GLVERTEXATTRIBL4I64NV, (GLuint index , GLint64EXT x , GLint64EXT y , GLint64EXT z , GLint64EXT w ), (index, x, y, z, w)) \
	FUNC(void , glVertexAttribL1i64vNV, GLVERTEXATTRIBL1I64VNV, (GLuint index , const GLint64EXT * v ), (index, v)) \
	FUNC(void , glVertexAttribL2i64vNV, GLVERTEXATTRIBL2I64VNV, (GLuint index , const GLint64EXT * v ), (index, v)) \
	FUNC(void , glVertexAttribL3i64vNV, GLVERTEXATTRIBL3I64VNV, (GLuint index , const GLint64EXT * v ), (index, v)) \
	FUNC(void , glVertexAttribL4i64vNV, GLVERTEXATTRIBL4I64VNV, (GLuint index , const GLint64EXT * v ), (index, v)) \
	FUNC(void , glVertexAttribL1ui64NV, GLVERTEXATTRIBL1UI64NV, (GLuint index , GLuint64EXT x ), (index, x)) \
	FUNC(void , glVertexAttribL2ui64NV, GLVERTEXATTRIBL2UI64NV, (GLuint index , GLuint64EXT x , GLuint64EXT y ), (index, x, y)) \
	FUNC(void , glVertexAttribL3ui64NV, GLVERTEXATTRIBL3UI64NV, (GLuint index , GLuint64EXT x , GLuint64EXT y , GLuint64EXT z ), (index, x, y, z)) \
	FUNC(void , glVertexAttribL4ui64NV, GLVERTEXATTRIBL4UI64NV, (GLuint index , GLuint64EXT x , GLuint64EXT y , GLuint64EXT z , GLuint64EXT w ), (index, x, y, z, w)) \
	FUNC(void , glVertexAttribL1ui64vNV, GLVERTEXATTRIBL1UI64VNV, (GLuint index , const GLuint64EXT * v ), (index, v)) \
	FUNC(void , glVertexAttribL2ui64vNV, GLVERTEXATTRIBL2UI64VNV, (GLuint index , const GLuint64EXT * v ), (index, v)) \
	FUNC(void , glVertexAttribL3ui64vNV, GLVERTEXATTRIBL3UI64VNV, (GLuint index , const GLuint64EXT * v ), (index, v)) \
	FUNC(void , glVertexAttribL4ui64vNV, GLVERTEXATTRIBL4UI64VNV, (GLuint index , const GLuint64EXT * v ), (index, v)) \
	FUNC(void , glGetVertexAttribLi64vNV, GLGETVERTEXATTRIBLI64VNV, (GLuint index , GLenum pname , GLint64EXT * params ), (index, pname, params)) \
	FUNC(void , glGetVertexAttribLui64vNV, GLGETVERTEXATTRIBLUI64VNV, (GLuint index , GLenum pname , GLuint64EXT * params ), (index, pname, params)) \
	FUNC(void , glVertexAttribLFormatNV, GLVERTEXATTRIBLFORMATNV, (GLuint index , GLint size , GLenum type , GLsizei stride ), (index, size, type, stride)) \
	END()
#else
#define EXTENSION_GL_NV_vertex_attrib_integer_64bit(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_vertex_buffer_unified_memory
#define GL_NV_vertex_buffer_unified_memory 1
#define EXTENSION_GL_NV_vertex_buffer_unified_memory(NAME, FUNC, CONST, END) \
	NAME(GL_NV_vertex_buffer_unified_memory) \
	CONST(int, GL_VERTEX_ATTRIB_ARRAY_UNIFIED_NV, 0x8F1E) \
	CONST(int, GL_ELEMENT_ARRAY_UNIFIED_NV, 0x8F1F) \
	CONST(int, GL_VERTEX_ATTRIB_ARRAY_ADDRESS_NV, 0x8F20) \
	CONST(int, GL_VERTEX_ARRAY_ADDRESS_NV, 0x8F21) \
	CONST(int, GL_NORMAL_ARRAY_ADDRESS_NV, 0x8F22) \
	CONST(int, GL_COLOR_ARRAY_ADDRESS_NV, 0x8F23) \
	CONST(int, GL_INDEX_ARRAY_ADDRESS_NV, 0x8F24) \
	CONST(int, GL_TEXTURE_COORD_ARRAY_ADDRESS_NV, 0x8F25) \
	CONST(int, GL_EDGE_FLAG_ARRAY_ADDRESS_NV, 0x8F26) \
	CONST(int, GL_SECONDARY_COLOR_ARRAY_ADDRESS_NV, 0x8F27) \
	CONST(int, GL_FOG_COORD_ARRAY_ADDRESS_NV, 0x8F28) \
	CONST(int, GL_ELEMENT_ARRAY_ADDRESS_NV, 0x8F29) \
	CONST(int, GL_VERTEX_ATTRIB_ARRAY_LENGTH_NV, 0x8F2A) \
	CONST(int, GL_VERTEX_ARRAY_LENGTH_NV, 0x8F2B) \
	CONST(int, GL_NORMAL_ARRAY_LENGTH_NV, 0x8F2C) \
	CONST(int, GL_COLOR_ARRAY_LENGTH_NV, 0x8F2D) \
	CONST(int, GL_INDEX_ARRAY_LENGTH_NV, 0x8F2E) \
	CONST(int, GL_TEXTURE_COORD_ARRAY_LENGTH_NV, 0x8F2F) \
	CONST(int, GL_EDGE_FLAG_ARRAY_LENGTH_NV, 0x8F30) \
	CONST(int, GL_SECONDARY_COLOR_ARRAY_LENGTH_NV, 0x8F31) \
	CONST(int, GL_FOG_COORD_ARRAY_LENGTH_NV, 0x8F32) \
	CONST(int, GL_ELEMENT_ARRAY_LENGTH_NV, 0x8F33) \
	CONST(int, GL_DRAW_INDIRECT_UNIFIED_NV, 0x8F40) \
	CONST(int, GL_DRAW_INDIRECT_ADDRESS_NV, 0x8F41) \
	CONST(int, GL_DRAW_INDIRECT_LENGTH_NV, 0x8F42) \
	FUNC(void , glBufferAddressRangeNV, GLBUFFERADDRESSRANGENV, (GLenum pname , GLuint index , GLuint64EXT address , GLsizeiptr length ), (pname, index, address, length)) \
	FUNC(void , glVertexFormatNV, GLVERTEXFORMATNV, (GLint size , GLenum type , GLsizei stride ), (size, type, stride)) \
	FUNC(void , glNormalFormatNV, GLNORMALFORMATNV, (GLenum type , GLsizei stride ), (type, stride)) \
	FUNC(void , glColorFormatNV, GLCOLORFORMATNV, (GLint size , GLenum type , GLsizei stride ), (size, type, stride)) \
	FUNC(void , glIndexFormatNV, GLINDEXFORMATNV, (GLenum type , GLsizei stride ), (type, stride)) \
	FUNC(void , glTexCoordFormatNV, GLTEXCOORDFORMATNV, (GLint size , GLenum type , GLsizei stride ), (size, type, stride)) \
	FUNC(void , glEdgeFlagFormatNV, GLEDGEFLAGFORMATNV, (GLsizei stride ), (stride)) \
	FUNC(void , glSecondaryColorFormatNV, GLSECONDARYCOLORFORMATNV, (GLint size , GLenum type , GLsizei stride ), (size, type, stride)) \
	FUNC(void , glFogCoordFormatNV, GLFOGCOORDFORMATNV, (GLenum type , GLsizei stride ), (type, stride)) \
	FUNC(void , glVertexAttribFormatNV, GLVERTEXATTRIBFORMATNV, (GLuint index , GLint size , GLenum type , GLboolean normalized , GLsizei stride ), (index, size, type, normalized, stride)) \
	FUNC(void , glVertexAttribIFormatNV, GLVERTEXATTRIBIFORMATNV, (GLuint index , GLint size , GLenum type , GLsizei stride ), (index, size, type, stride)) \
	FUNC(void , glGetIntegerui64i_vNV, GLGETINTEGERUI64I_VNV, (GLenum value , GLuint index , GLuint64EXT * result ), (value, index, result)) \
	END()
#else
#define EXTENSION_GL_NV_vertex_buffer_unified_memory(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_vertex_program
#define GL_NV_vertex_program 1
#define EXTENSION_GL_NV_vertex_program(NAME, FUNC, CONST, END) \
	NAME(GL_NV_vertex_program) \
	CONST(int, GL_VERTEX_PROGRAM_NV, 0x8620) \
	CONST(int, GL_VERTEX_STATE_PROGRAM_NV, 0x8621) \
	CONST(int, GL_ATTRIB_ARRAY_SIZE_NV, 0x8623) \
	CONST(int, GL_ATTRIB_ARRAY_STRIDE_NV, 0x8624) \
	CONST(int, GL_ATTRIB_ARRAY_TYPE_NV, 0x8625) \
	CONST(int, GL_CURRENT_ATTRIB_NV, 0x8626) \
	CONST(int, GL_PROGRAM_LENGTH_NV, 0x8627) \
	CONST(int, GL_PROGRAM_STRING_NV, 0x8628) \
	CONST(int, GL_MODELVIEW_PROJECTION_NV, 0x8629) \
	CONST(int, GL_IDENTITY_NV, 0x862A) \
	CONST(int, GL_INVERSE_NV, 0x862B) \
	CONST(int, GL_TRANSPOSE_NV, 0x862C) \
	CONST(int, GL_INVERSE_TRANSPOSE_NV, 0x862D) \
	CONST(int, GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV, 0x862E) \
	CONST(int, GL_MAX_TRACK_MATRICES_NV, 0x862F) \
	CONST(int, GL_MATRIX0_NV, 0x8630) \
	CONST(int, GL_MATRIX1_NV, 0x8631) \
	CONST(int, GL_MATRIX2_NV, 0x8632) \
	CONST(int, GL_MATRIX3_NV, 0x8633) \
	CONST(int, GL_MATRIX4_NV, 0x8634) \
	CONST(int, GL_MATRIX5_NV, 0x8635) \
	CONST(int, GL_MATRIX6_NV, 0x8636) \
	CONST(int, GL_MATRIX7_NV, 0x8637) \
	CONST(int, GL_CURRENT_MATRIX_STACK_DEPTH_NV, 0x8640) \
	CONST(int, GL_CURRENT_MATRIX_NV, 0x8641) \
	CONST(int, GL_VERTEX_PROGRAM_POINT_SIZE_NV, 0x8642) \
	CONST(int, GL_VERTEX_PROGRAM_TWO_SIDE_NV, 0x8643) \
	CONST(int, GL_PROGRAM_PARAMETER_NV, 0x8644) \
	CONST(int, GL_ATTRIB_ARRAY_POINTER_NV, 0x8645) \
	CONST(int, GL_PROGRAM_TARGET_NV, 0x8646) \
	CONST(int, GL_PROGRAM_RESIDENT_NV, 0x8647) \
	CONST(int, GL_TRACK_MATRIX_NV, 0x8648) \
	CONST(int, GL_TRACK_MATRIX_TRANSFORM_NV, 0x8649) \
	CONST(int, GL_VERTEX_PROGRAM_BINDING_NV, 0x864A) \
	CONST(int, GL_PROGRAM_ERROR_POSITION_NV, 0x864B) \
	CONST(int, GL_VERTEX_ATTRIB_ARRAY0_NV, 0x8650) \
	CONST(int, GL_VERTEX_ATTRIB_ARRAY1_NV, 0x8651) \
	CONST(int, GL_VERTEX_ATTRIB_ARRAY2_NV, 0x8652) \
	CONST(int, GL_VERTEX_ATTRIB_ARRAY3_NV, 0x8653) \
	CONST(int, GL_VERTEX_ATTRIB_ARRAY4_NV, 0x8654) \
	CONST(int, GL_VERTEX_ATTRIB_ARRAY5_NV, 0x8655) \
	CONST(int, GL_VERTEX_ATTRIB_ARRAY6_NV, 0x8656) \
	CONST(int, GL_VERTEX_ATTRIB_ARRAY7_NV, 0x8657) \
	CONST(int, GL_VERTEX_ATTRIB_ARRAY8_NV, 0x8658) \
	CONST(int, GL_VERTEX_ATTRIB_ARRAY9_NV, 0x8659) \
	CONST(int, GL_VERTEX_ATTRIB_ARRAY10_NV, 0x865A) \
	CONST(int, GL_VERTEX_ATTRIB_ARRAY11_NV, 0x865B) \
	CONST(int, GL_VERTEX_ATTRIB_ARRAY12_NV, 0x865C) \
	CONST(int, GL_VERTEX_ATTRIB_ARRAY13_NV, 0x865D) \
	CONST(int, GL_VERTEX_ATTRIB_ARRAY14_NV, 0x865E) \
	CONST(int, GL_VERTEX_ATTRIB_ARRAY15_NV, 0x865F) \
	CONST(int, GL_MAP1_VERTEX_ATTRIB0_4_NV, 0x8660) \
	CONST(int, GL_MAP1_VERTEX_ATTRIB1_4_NV, 0x8661) \
	CONST(int, GL_MAP1_VERTEX_ATTRIB2_4_NV, 0x8662) \
	CONST(int, GL_MAP1_VERTEX_ATTRIB3_4_NV, 0x8663) \
	CONST(int, GL_MAP1_VERTEX_ATTRIB4_4_NV, 0x8664) \
	CONST(int, GL_MAP1_VERTEX_ATTRIB5_4_NV, 0x8665) \
	CONST(int, GL_MAP1_VERTEX_ATTRIB6_4_NV, 0x8666) \
	CONST(int, GL_MAP1_VERTEX_ATTRIB7_4_NV, 0x8667) \
	CONST(int, GL_MAP1_VERTEX_ATTRIB8_4_NV, 0x8668) \
	CONST(int, GL_MAP1_VERTEX_ATTRIB9_4_NV, 0x8669) \
	CONST(int, GL_MAP1_VERTEX_ATTRIB10_4_NV, 0x866A) \
	CONST(int, GL_MAP1_VERTEX_ATTRIB11_4_NV, 0x866B) \
	CONST(int, GL_MAP1_VERTEX_ATTRIB12_4_NV, 0x866C) \
	CONST(int, GL_MAP1_VERTEX_ATTRIB13_4_NV, 0x866D) \
	CONST(int, GL_MAP1_VERTEX_ATTRIB14_4_NV, 0x866E) \
	CONST(int, GL_MAP1_VERTEX_ATTRIB15_4_NV, 0x866F) \
	CONST(int, GL_MAP2_VERTEX_ATTRIB0_4_NV, 0x8670) \
	CONST(int, GL_MAP2_VERTEX_ATTRIB1_4_NV, 0x8671) \
	CONST(int, GL_MAP2_VERTEX_ATTRIB2_4_NV, 0x8672) \
	CONST(int, GL_MAP2_VERTEX_ATTRIB3_4_NV, 0x8673) \
	CONST(int, GL_MAP2_VERTEX_ATTRIB4_4_NV, 0x8674) \
	CONST(int, GL_MAP2_VERTEX_ATTRIB5_4_NV, 0x8675) \
	CONST(int, GL_MAP2_VERTEX_ATTRIB6_4_NV, 0x8676) \
	CONST(int, GL_MAP2_VERTEX_ATTRIB7_4_NV, 0x8677) \
	CONST(int, GL_MAP2_VERTEX_ATTRIB8_4_NV, 0x8678) \
	CONST(int, GL_MAP2_VERTEX_ATTRIB9_4_NV, 0x8679) \
	CONST(int, GL_MAP2_VERTEX_ATTRIB10_4_NV, 0x867A) \
	CONST(int, GL_MAP2_VERTEX_ATTRIB11_4_NV, 0x867B) \
	CONST(int, GL_MAP2_VERTEX_ATTRIB12_4_NV, 0x867C) \
	CONST(int, GL_MAP2_VERTEX_ATTRIB13_4_NV, 0x867D) \
	CONST(int, GL_MAP2_VERTEX_ATTRIB14_4_NV, 0x867E) \
	CONST(int, GL_MAP2_VERTEX_ATTRIB15_4_NV, 0x867F) \
	FUNC(GLboolean , glAreProgramsResidentNV, GLAREPROGRAMSRESIDENTNV, (GLsizei n , const GLuint * programs , GLboolean * residences ), (n, programs, residences)) \
	FUNC(void , glBindProgramNV, GLBINDPROGRAMNV, (GLenum target , GLuint id ), (target, id)) \
	FUNC(void , glDeleteProgramsNV, GLDELETEPROGRAMSNV, (GLsizei n , const GLuint * programs ), (n, programs)) \
	FUNC(void , glExecuteProgramNV, GLEXECUTEPROGRAMNV, (GLenum target , GLuint id , const GLfloat * params ), (target, id, params)) \
	FUNC(void , glGenProgramsNV, GLGENPROGRAMSNV, (GLsizei n , GLuint * programs ), (n, programs)) \
	FUNC(void , glGetProgramParameterdvNV, GLGETPROGRAMPARAMETERDVNV, (GLenum target , GLuint index , GLenum pname , GLdouble * params ), (target, index, pname, params)) \
	FUNC(void , glGetProgramParameterfvNV, GLGETPROGRAMPARAMETERFVNV, (GLenum target , GLuint index , GLenum pname , GLfloat * params ), (target, index, pname, params)) \
	FUNC(void , glGetProgramivNV, GLGETPROGRAMIVNV, (GLuint id , GLenum pname , GLint * params ), (id, pname, params)) \
	FUNC(void , glGetProgramStringNV, GLGETPROGRAMSTRINGNV, (GLuint id , GLenum pname , GLubyte * program ), (id, pname, program)) \
	FUNC(void , glGetTrackMatrixivNV, GLGETTRACKMATRIXIVNV, (GLenum target , GLuint address , GLenum pname , GLint * params ), (target, address, pname, params)) \
	FUNC(void , glGetVertexAttribdvNV, GLGETVERTEXATTRIBDVNV, (GLuint index , GLenum pname , GLdouble * params ), (index, pname, params)) \
	FUNC(void , glGetVertexAttribfvNV, GLGETVERTEXATTRIBFVNV, (GLuint index , GLenum pname , GLfloat * params ), (index, pname, params)) \
	FUNC(void , glGetVertexAttribivNV, GLGETVERTEXATTRIBIVNV, (GLuint index , GLenum pname , GLint * params ), (index, pname, params)) \
	FUNC(void , glGetVertexAttribPointervNV, GLGETVERTEXATTRIBPOINTERVNV, (GLuint index , GLenum pname , GLvoid * * pointer ), (index, pname, pointer)) \
	FUNC(GLboolean , glIsProgramNV, GLISPROGRAMNV, (GLuint id ), (id)) \
	FUNC(void , glLoadProgramNV, GLLOADPROGRAMNV, (GLenum target , GLuint id , GLsizei len , const GLubyte * program ), (target, id, len, program)) \
	FUNC(void , glProgramParameter4dNV, GLPROGRAMPARAMETER4DNV, (GLenum target , GLuint index , GLdouble x , GLdouble y , GLdouble z , GLdouble w ), (target, index, x, y, z, w)) \
	FUNC(void , glProgramParameter4dvNV, GLPROGRAMPARAMETER4DVNV, (GLenum target , GLuint index , const GLdouble * v ), (target, index, v)) \
	FUNC(void , glProgramParameter4fNV, GLPROGRAMPARAMETER4FNV, (GLenum target , GLuint index , GLfloat x , GLfloat y , GLfloat z , GLfloat w ), (target, index, x, y, z, w)) \
	FUNC(void , glProgramParameter4fvNV, GLPROGRAMPARAMETER4FVNV, (GLenum target , GLuint index , const GLfloat * v ), (target, index, v)) \
	FUNC(void , glProgramParameters4dvNV, GLPROGRAMPARAMETERS4DVNV, (GLenum target , GLuint index , GLsizei count , const GLdouble * v ), (target, index, count, v)) \
	FUNC(void , glProgramParameters4fvNV, GLPROGRAMPARAMETERS4FVNV, (GLenum target , GLuint index , GLsizei count , const GLfloat * v ), (target, index, count, v)) \
	FUNC(void , glRequestResidentProgramsNV, GLREQUESTRESIDENTPROGRAMSNV, (GLsizei n , const GLuint * programs ), (n, programs)) \
	FUNC(void , glTrackMatrixNV, GLTRACKMATRIXNV, (GLenum target , GLuint address , GLenum matrix , GLenum transform ), (target, address, matrix, transform)) \
	FUNC(void , glVertexAttribPointerNV, GLVERTEXATTRIBPOINTERNV, (GLuint index , GLint fsize , GLenum type , GLsizei stride , const GLvoid * pointer ), (index, fsize, type, stride, pointer)) \
	FUNC(void , glVertexAttrib1dNV, GLVERTEXATTRIB1DNV, (GLuint index , GLdouble x ), (index, x)) \
	FUNC(void , glVertexAttrib1dvNV, GLVERTEXATTRIB1DVNV, (GLuint index , const GLdouble * v ), (index, v)) \
	FUNC(void , glVertexAttrib1fNV, GLVERTEXATTRIB1FNV, (GLuint index , GLfloat x ), (index, x)) \
	FUNC(void , glVertexAttrib1fvNV, GLVERTEXATTRIB1FVNV, (GLuint index , const GLfloat * v ), (index, v)) \
	FUNC(void , glVertexAttrib1sNV, GLVERTEXATTRIB1SNV, (GLuint index , GLshort x ), (index, x)) \
	FUNC(void , glVertexAttrib1svNV, GLVERTEXATTRIB1SVNV, (GLuint index , const GLshort * v ), (index, v)) \
	FUNC(void , glVertexAttrib2dNV, GLVERTEXATTRIB2DNV, (GLuint index , GLdouble x , GLdouble y ), (index, x, y)) \
	FUNC(void , glVertexAttrib2dvNV, GLVERTEXATTRIB2DVNV, (GLuint index , const GLdouble * v ), (index, v)) \
	FUNC(void , glVertexAttrib2fNV, GLVERTEXATTRIB2FNV, (GLuint index , GLfloat x , GLfloat y ), (index, x, y)) \
	FUNC(void , glVertexAttrib2fvNV, GLVERTEXATTRIB2FVNV, (GLuint index , const GLfloat * v ), (index, v)) \
	FUNC(void , glVertexAttrib2sNV, GLVERTEXATTRIB2SNV, (GLuint index , GLshort x , GLshort y ), (index, x, y)) \
	FUNC(void , glVertexAttrib2svNV, GLVERTEXATTRIB2SVNV, (GLuint index , const GLshort * v ), (index, v)) \
	FUNC(void , glVertexAttrib3dNV, GLVERTEXATTRIB3DNV, (GLuint index , GLdouble x , GLdouble y , GLdouble z ), (index, x, y, z)) \
	FUNC(void , glVertexAttrib3dvNV, GLVERTEXATTRIB3DVNV, (GLuint index , const GLdouble * v ), (index, v)) \
	FUNC(void , glVertexAttrib3fNV, GLVERTEXATTRIB3FNV, (GLuint index , GLfloat x , GLfloat y , GLfloat z ), (index, x, y, z)) \
	FUNC(void , glVertexAttrib3fvNV, GLVERTEXATTRIB3FVNV, (GLuint index , const GLfloat * v ), (index, v)) \
	FUNC(void , glVertexAttrib3sNV, GLVERTEXATTRIB3SNV, (GLuint index , GLshort x , GLshort y , GLshort z ), (index, x, y, z)) \
	FUNC(void , glVertexAttrib3svNV, GLVERTEXATTRIB3SVNV, (GLuint index , const GLshort * v ), (index, v)) \
	FUNC(void , glVertexAttrib4dNV, GLVERTEXATTRIB4DNV, (GLuint index , GLdouble x , GLdouble y , GLdouble z , GLdouble w ), (index, x, y, z, w)) \
	FUNC(void , glVertexAttrib4dvNV, GLVERTEXATTRIB4DVNV, (GLuint index , const GLdouble * v ), (index, v)) \
	FUNC(void , glVertexAttrib4fNV, GLVERTEXATTRIB4FNV, (GLuint index , GLfloat x , GLfloat y , GLfloat z , GLfloat w ), (index, x, y, z, w)) \
	FUNC(void , glVertexAttrib4fvNV, GLVERTEXATTRIB4FVNV, (GLuint index , const GLfloat * v ), (index, v)) \
	FUNC(void , glVertexAttrib4sNV, GLVERTEXATTRIB4SNV, (GLuint index , GLshort x , GLshort y , GLshort z , GLshort w ), (index, x, y, z, w)) \
	FUNC(void , glVertexAttrib4svNV, GLVERTEXATTRIB4SVNV, (GLuint index , const GLshort * v ), (index, v)) \
	FUNC(void , glVertexAttrib4ubNV, GLVERTEXATTRIB4UBNV, (GLuint index , GLubyte x , GLubyte y , GLubyte z , GLubyte w ), (index, x, y, z, w)) \
	FUNC(void , glVertexAttrib4ubvNV, GLVERTEXATTRIB4UBVNV, (GLuint index , const GLubyte * v ), (index, v)) \
	FUNC(void , glVertexAttribs1dvNV, GLVERTEXATTRIBS1DVNV, (GLuint index , GLsizei count , const GLdouble * v ), (index, count, v)) \
	FUNC(void , glVertexAttribs1fvNV, GLVERTEXATTRIBS1FVNV, (GLuint index , GLsizei count , const GLfloat * v ), (index, count, v)) \
	FUNC(void , glVertexAttribs1svNV, GLVERTEXATTRIBS1SVNV, (GLuint index , GLsizei count , const GLshort * v ), (index, count, v)) \
	FUNC(void , glVertexAttribs2dvNV, GLVERTEXATTRIBS2DVNV, (GLuint index , GLsizei count , const GLdouble * v ), (index, count, v)) \
	FUNC(void , glVertexAttribs2fvNV, GLVERTEXATTRIBS2FVNV, (GLuint index , GLsizei count , const GLfloat * v ), (index, count, v)) \
	FUNC(void , glVertexAttribs2svNV, GLVERTEXATTRIBS2SVNV, (GLuint index , GLsizei count , const GLshort * v ), (index, count, v)) \
	FUNC(void , glVertexAttribs3dvNV, GLVERTEXATTRIBS3DVNV, (GLuint index , GLsizei count , const GLdouble * v ), (index, count, v)) \
	FUNC(void , glVertexAttribs3fvNV, GLVERTEXATTRIBS3FVNV, (GLuint index , GLsizei count , const GLfloat * v ), (index, count, v)) \
	FUNC(void , glVertexAttribs3svNV, GLVERTEXATTRIBS3SVNV, (GLuint index , GLsizei count , const GLshort * v ), (index, count, v)) \
	FUNC(void , glVertexAttribs4dvNV, GLVERTEXATTRIBS4DVNV, (GLuint index , GLsizei count , const GLdouble * v ), (index, count, v)) \
	FUNC(void , glVertexAttribs4fvNV, GLVERTEXATTRIBS4FVNV, (GLuint index , GLsizei count , const GLfloat * v ), (index, count, v)) \
	FUNC(void , glVertexAttribs4svNV, GLVERTEXATTRIBS4SVNV, (GLuint index , GLsizei count , const GLshort * v ), (index, count, v)) \
	FUNC(void , glVertexAttribs4ubvNV, GLVERTEXATTRIBS4UBVNV, (GLuint index , GLsizei count , const GLubyte * v ), (index, count, v)) \
	END()
#else
#define EXTENSION_GL_NV_vertex_program(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_vertex_program1_1
#define GL_NV_vertex_program1_1 1
#define EXTENSION_GL_NV_vertex_program1_1(NAME, FUNC, CONST, END) \
	NAME(GL_NV_vertex_program1_1) \
	END()
#else
#define EXTENSION_GL_NV_vertex_program1_1(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_vertex_program2
#define GL_NV_vertex_program2 1
#define EXTENSION_GL_NV_vertex_program2(NAME, FUNC, CONST, END) \
	NAME(GL_NV_vertex_program2) \
	END()
#else
#define EXTENSION_GL_NV_vertex_program2(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_vertex_program2_option
#define GL_NV_vertex_program2_option 1
#define EXTENSION_GL_NV_vertex_program2_option(NAME, FUNC, CONST, END) \
	NAME(GL_NV_vertex_program2_option) \
	END()
#else
#define EXTENSION_GL_NV_vertex_program2_option(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_vertex_program3
#define GL_NV_vertex_program3 1
#define EXTENSION_GL_NV_vertex_program3(NAME, FUNC, CONST, END) \
	NAME(GL_NV_vertex_program3) \
	END()
#else
#define EXTENSION_GL_NV_vertex_program3(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_vertex_program4
#define GL_NV_vertex_program4 1
#define EXTENSION_GL_NV_vertex_program4(NAME, FUNC, CONST, END) \
	NAME(GL_NV_vertex_program4) \
	CONST(int, GL_VERTEX_ATTRIB_ARRAY_INTEGER_NV, 0x88FD) \
	FUNC(void , glVertexAttribI1iEXT, GLVERTEXATTRIBI1IEXT, (GLuint index , GLint x ), (index, x)) \
	FUNC(void , glVertexAttribI2iEXT, GLVERTEXATTRIBI2IEXT, (GLuint index , GLint x , GLint y ), (index, x, y)) \
	FUNC(void , glVertexAttribI3iEXT, GLVERTEXATTRIBI3IEXT, (GLuint index , GLint x , GLint y , GLint z ), (index, x, y, z)) \
	FUNC(void , glVertexAttribI4iEXT, GLVERTEXATTRIBI4IEXT, (GLuint index , GLint x , GLint y , GLint z , GLint w ), (index, x, y, z, w)) \
	FUNC(void , glVertexAttribI1uiEXT, GLVERTEXATTRIBI1UIEXT, (GLuint index , GLuint x ), (index, x)) \
	FUNC(void , glVertexAttribI2uiEXT, GLVERTEXATTRIBI2UIEXT, (GLuint index , GLuint x , GLuint y ), (index, x, y)) \
	FUNC(void , glVertexAttribI3uiEXT, GLVERTEXATTRIBI3UIEXT, (GLuint index , GLuint x , GLuint y , GLuint z ), (index, x, y, z)) \
	FUNC(void , glVertexAttribI4uiEXT, GLVERTEXATTRIBI4UIEXT, (GLuint index , GLuint x , GLuint y , GLuint z , GLuint w ), (index, x, y, z, w)) \
	FUNC(void , glVertexAttribI1ivEXT, GLVERTEXATTRIBI1IVEXT, (GLuint index , const GLint * v ), (index, v)) \
	FUNC(void , glVertexAttribI2ivEXT, GLVERTEXATTRIBI2IVEXT, (GLuint index , const GLint * v ), (index, v)) \
	FUNC(void , glVertexAttribI3ivEXT, GLVERTEXATTRIBI3IVEXT, (GLuint index , const GLint * v ), (index, v)) \
	FUNC(void , glVertexAttribI4ivEXT, GLVERTEXATTRIBI4IVEXT, (GLuint index , const GLint * v ), (index, v)) \
	FUNC(void , glVertexAttribI1uivEXT, GLVERTEXATTRIBI1UIVEXT, (GLuint index , const GLuint * v ), (index, v)) \
	FUNC(void , glVertexAttribI2uivEXT, GLVERTEXATTRIBI2UIVEXT, (GLuint index , const GLuint * v ), (index, v)) \
	FUNC(void , glVertexAttribI3uivEXT, GLVERTEXATTRIBI3UIVEXT, (GLuint index , const GLuint * v ), (index, v)) \
	FUNC(void , glVertexAttribI4uivEXT, GLVERTEXATTRIBI4UIVEXT, (GLuint index , const GLuint * v ), (index, v)) \
	FUNC(void , glVertexAttribI4bvEXT, GLVERTEXATTRIBI4BVEXT, (GLuint index , const GLbyte * v ), (index, v)) \
	FUNC(void , glVertexAttribI4svEXT, GLVERTEXATTRIBI4SVEXT, (GLuint index , const GLshort * v ), (index, v)) \
	FUNC(void , glVertexAttribI4ubvEXT, GLVERTEXATTRIBI4UBVEXT, (GLuint index , const GLubyte * v ), (index, v)) \
	FUNC(void , glVertexAttribI4usvEXT, GLVERTEXATTRIBI4USVEXT, (GLuint index , const GLushort * v ), (index, v)) \
	FUNC(void , glVertexAttribIPointerEXT, GLVERTEXATTRIBIPOINTEREXT, (GLuint index , GLint size , GLenum type , GLsizei stride , const GLvoid * pointer ), (index, size, type, stride, pointer)) \
	FUNC(void , glGetVertexAttribIivEXT, GLGETVERTEXATTRIBIIVEXT, (GLuint index , GLenum pname , GLint * params ), (index, pname, params)) \
	FUNC(void , glGetVertexAttribIuivEXT, GLGETVERTEXATTRIBIUIVEXT, (GLuint index , GLenum pname , GLuint * params ), (index, pname, params)) \
	END()
#else
#define EXTENSION_GL_NV_vertex_program4(NAME, FUNC, CONST, END)
#endif

#ifndef GL_NV_video_capture
#define GL_NV_video_capture 1
#define EXTENSION_GL_NV_video_capture(NAME, FUNC, CONST, END) \
	NAME(GL_NV_video_capture) \
	CONST(int, GL_VIDEO_BUFFER_NV, 0x9020) \
	CONST(int, GL_VIDEO_BUFFER_BINDING_NV, 0x9021) \
	CONST(int, GL_FIELD_UPPER_NV, 0x9022) \
	CONST(int, GL_FIELD_LOWER_NV, 0x9023) \
	CONST(int, GL_NUM_VIDEO_CAPTURE_STREAMS_NV, 0x9024) \
	CONST(int, GL_NEXT_VIDEO_CAPTURE_BUFFER_STATUS_NV, 0x9025) \
	CONST(int, GL_VIDEO_CAPTURE_TO_422_SUPPORTED_NV, 0x9026) \
	CONST(int, GL_LAST_VIDEO_CAPTURE_STATUS_NV, 0x9027) \
	CONST(int, GL_VIDEO_BUFFER_PITCH_NV, 0x9028) \
	CONST(int, GL_VIDEO_COLOR_CONVERSION_MATRIX_NV, 0x9029) \
	CONST(int, GL_VIDEO_COLOR_CONVERSION_MAX_NV, 0x902A) \
	CONST(int, GL_VIDEO_COLOR_CONVERSION_MIN_NV, 0x902B) \
	CONST(int, GL_VIDEO_COLOR_CONVERSION_OFFSET_NV, 0x902C) \
	CONST(int, GL_VIDEO_BUFFER_INTERNAL_FORMAT_NV, 0x902D) \
	CONST(int, GL_PARTIAL_SUCCESS_NV, 0x902E) \
	CONST(int, GL_SUCCESS_NV, 0x902F) \
	CONST(int, GL_FAILURE_NV, 0x9030) \
	CONST(int, GL_YCBYCR8_422_NV, 0x9031) \
	CONST(int, GL_YCBAYCR8A_4224_NV, 0x9032) \
	CONST(int, GL_Z6Y10Z6CB10Z6Y10Z6CR10_422_NV, 0x9033) \
	CONST(int, GL_Z6Y10Z6CB10Z6A10Z6Y10Z6CR10Z6A10_4224_NV, 0x9034) \
	CONST(int, GL_Z4Y12Z4CB12Z4Y12Z4CR12_422_NV, 0x9035) \
	CONST(int, GL_Z4Y12Z4CB12Z4A12Z4Y12Z4CR12Z4A12_4224_NV, 0x9036) \
	CONST(int, GL_Z4Y12Z4CB12Z4CR12_444_NV, 0x9037) \
	CONST(int, GL_VIDEO_CAPTURE_FRAME_WIDTH_NV, 0x9038) \
	CONST(int, GL_VIDEO_CAPTURE_FRAME_HEIGHT_NV, 0x9039) \
	CONST(int, GL_VIDEO_CAPTURE_FIELD_UPPER_HEIGHT_NV, 0x903A) \
	CONST(int, GL_VIDEO_CAPTURE_FIELD_LOWER_HEIGHT_NV, 0x903B) \
	CONST(int, GL_VIDEO_CAPTURE_SURFACE_ORIGIN_NV, 0x903C) \
	FUNC(void , glBeginVideoCaptureNV, GLBEGINVIDEOCAPTURENV, (GLuint video_capture_slot ), (video_capture_slot)) \
	FUNC(void , glBindVideoCaptureStreamBufferNV, GLBINDVIDEOCAPTURESTREAMBUFFERNV, (GLuint video_capture_slot , GLuint stream , GLenum frame_region , GLintptrARB offset ), (video_capture_slot, stream, frame_region, offset)) \
	FUNC(void , glBindVideoCaptureStreamTextureNV, GLBINDVIDEOCAPTURESTREAMTEXTURENV, (GLuint video_capture_slot , GLuint stream , GLenum frame_region , GLenum target , GLuint texture ), (video_capture_slot, stream, frame_region, target, texture)) \
	FUNC(void , glEndVideoCaptureNV, GLENDVIDEOCAPTURENV, (GLuint video_capture_slot ), (video_capture_slot)) \
	FUNC(void , glGetVideoCaptureivNV, GLGETVIDEOCAPTUREIVNV, (GLuint video_capture_slot , GLenum pname , GLint * params ), (video_capture_slot, pname, params)) \
	FUNC(void , glGetVideoCaptureStreamivNV, GLGETVIDEOCAPTURESTREAMIVNV, (GLuint video_capture_slot , GLuint stream , GLenum pname , GLint * params ), (video_capture_slot, stream, pname, params)) \
	FUNC(void , glGetVideoCaptureStreamfvNV, GLGETVIDEOCAPTURESTREAMFVNV, (GLuint video_capture_slot , GLuint stream , GLenum pname , GLfloat * params ), (video_capture_slot, stream, pname, params)) \
	FUNC(void , glGetVideoCaptureStreamdvNV, GLGETVIDEOCAPTURESTREAMDVNV, (GLuint video_capture_slot , GLuint stream , GLenum pname , GLdouble * params ), (video_capture_slot, stream, pname, params)) \
	FUNC(GLenum , glVideoCaptureNV, GLVIDEOCAPTURENV, (GLuint video_capture_slot , GLuint * sequence_num , GLuint64EXT * capture_time ), (video_capture_slot, sequence_num, capture_time)) \
	FUNC(void , glVideoCaptureStreamParameterivNV, GLVIDEOCAPTURESTREAMPARAMETERIVNV, (GLuint video_capture_slot , GLuint stream , GLenum pname , const GLint * params ), (video_capture_slot, stream, pname, params)) \
	FUNC(void , glVideoCaptureStreamParameterfvNV, GLVIDEOCAPTURESTREAMPARAMETERFVNV, (GLuint video_capture_slot , GLuint stream , GLenum pname , const GLfloat * params ), (video_capture_slot, stream, pname, params)) \
	FUNC(void , glVideoCaptureStreamParameterdvNV, GLVIDEOCAPTURESTREAMPARAMETERDVNV, (GLuint video_capture_slot , GLuint stream , GLenum pname , const GLdouble * params ), (video_capture_slot, stream, pname, params)) \
	END()
#else
#define EXTENSION_GL_NV_video_capture(NAME, FUNC, CONST, END)
#endif

#ifndef GL_OES_read_format
#define GL_OES_read_format 1
#define EXTENSION_GL_OES_read_format(NAME, FUNC, CONST, END) \
	NAME(GL_OES_read_format) \
	CONST(int, GL_IMPLEMENTATION_COLOR_READ_TYPE_OES, 0x8B9A) \
	CONST(int, GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES, 0x8B9B) \
	END()
#else
#define EXTENSION_GL_OES_read_format(NAME, FUNC, CONST, END)
#endif

#ifndef GL_OML_interlace
#define GL_OML_interlace 1
#define EXTENSION_GL_OML_interlace(NAME, FUNC, CONST, END) \
	NAME(GL_OML_interlace) \
	CONST(int, GL_INTERLACE_OML, 0x8980) \
	CONST(int, GL_INTERLACE_READ_OML, 0x8981) \
	END()
#else
#define EXTENSION_GL_OML_interlace(NAME, FUNC, CONST, END)
#endif

#ifndef GL_OML_resample
#define GL_OML_resample 1
#define EXTENSION_GL_OML_resample(NAME, FUNC, CONST, END) \
	NAME(GL_OML_resample) \
	CONST(int, GL_PACK_RESAMPLE_OML, 0x8984) \
	CONST(int, GL_UNPACK_RESAMPLE_OML, 0x8985) \
	CONST(int, GL_RESAMPLE_REPLICATE_OML, 0x8986) \
	CONST(int, GL_RESAMPLE_ZERO_FILL_OML, 0x8987) \
	CONST(int, GL_RESAMPLE_AVERAGE_OML, 0x8988) \
	CONST(int, GL_RESAMPLE_DECIMATE_OML, 0x8989) \
	END()
#else
#define EXTENSION_GL_OML_resample(NAME, FUNC, CONST, END)
#endif

#ifndef GL_OML_subsample
#define GL_OML_subsample 1
#define EXTENSION_GL_OML_subsample(NAME, FUNC, CONST, END) \
	NAME(GL_OML_subsample) \
	CONST(int, GL_FORMAT_SUBSAMPLE_24_24_OML, 0x8982) \
	CONST(int, GL_FORMAT_SUBSAMPLE_244_244_OML, 0x8983) \
	END()
#else
#define EXTENSION_GL_OML_subsample(NAME, FUNC, CONST, END)
#endif

#ifndef GL_PGI_misc_hints
#define GL_PGI_misc_hints 1
#define EXTENSION_GL_PGI_misc_hints(NAME, FUNC, CONST, END) \
	NAME(GL_PGI_misc_hints) \
	CONST(int, GL_PREFER_DOUBLEBUFFER_HINT_PGI, 0x1A1F8) \
	CONST(int, GL_CONSERVE_MEMORY_HINT_PGI, 0x1A1FD) \
	CONST(int, GL_RECLAIM_MEMORY_HINT_PGI, 0x1A1FE) \
	CONST(int, GL_NATIVE_GRAPHICS_HANDLE_PGI, 0x1A202) \
	CONST(int, GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI, 0x1A203) \
	CONST(int, GL_NATIVE_GRAPHICS_END_HINT_PGI, 0x1A204) \
	CONST(int, GL_ALWAYS_FAST_HINT_PGI, 0x1A20C) \
	CONST(int, GL_ALWAYS_SOFT_HINT_PGI, 0x1A20D) \
	CONST(int, GL_ALLOW_DRAW_OBJ_HINT_PGI, 0x1A20E) \
	CONST(int, GL_ALLOW_DRAW_WIN_HINT_PGI, 0x1A20F) \
	CONST(int, GL_ALLOW_DRAW_FRG_HINT_PGI, 0x1A210) \
	CONST(int, GL_ALLOW_DRAW_MEM_HINT_PGI, 0x1A211) \
	CONST(int, GL_STRICT_DEPTHFUNC_HINT_PGI, 0x1A216) \
	CONST(int, GL_STRICT_LIGHTING_HINT_PGI, 0x1A217) \
	CONST(int, GL_STRICT_SCISSOR_HINT_PGI, 0x1A218) \
	CONST(int, GL_FULL_STIPPLE_HINT_PGI, 0x1A219) \
	CONST(int, GL_CLIP_NEAR_HINT_PGI, 0x1A220) \
	CONST(int, GL_CLIP_FAR_HINT_PGI, 0x1A221) \
	CONST(int, GL_WIDE_LINE_HINT_PGI, 0x1A222) \
	CONST(int, GL_BACK_NORMALS_HINT_PGI, 0x1A223) \
	FUNC(void , glHintPGI, GLHINTPGI, (GLenum target , GLint mode ), (target, mode)) \
	END()
#else
#define EXTENSION_GL_PGI_misc_hints(NAME, FUNC, CONST, END)
#endif

#ifndef GL_PGI_vertex_hints
#define GL_PGI_vertex_hints 1
#define EXTENSION_GL_PGI_vertex_hints(NAME, FUNC, CONST, END) \
	NAME(GL_PGI_vertex_hints) \
	CONST(int, GL_VERTEX_DATA_HINT_PGI, 0x1A22A) \
	CONST(int, GL_VERTEX_CONSISTENT_HINT_PGI, 0x1A22B) \
	CONST(int, GL_MATERIAL_SIDE_HINT_PGI, 0x1A22C) \
	CONST(int, GL_MAX_VERTEX_HINT_PGI, 0x1A22D) \
	CONST(int, GL_COLOR3_BIT_PGI, 0x00010000) \
	CONST(int, GL_COLOR4_BIT_PGI, 0x00020000) \
	CONST(int, GL_EDGEFLAG_BIT_PGI, 0x00040000) \
	CONST(int, GL_INDEX_BIT_PGI, 0x00080000) \
	CONST(int, GL_MAT_AMBIENT_BIT_PGI, 0x00100000) \
	CONST(int, GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI, 0x00200000) \
	CONST(int, GL_MAT_DIFFUSE_BIT_PGI, 0x00400000) \
	CONST(int, GL_MAT_EMISSION_BIT_PGI, 0x00800000) \
	CONST(int, GL_MAT_COLOR_INDEXES_BIT_PGI, 0x01000000) \
	CONST(int, GL_MAT_SHININESS_BIT_PGI, 0x02000000) \
	CONST(int, GL_MAT_SPECULAR_BIT_PGI, 0x04000000) \
	CONST(int, GL_NORMAL_BIT_PGI, 0x08000000) \
	CONST(int, GL_TEXCOORD1_BIT_PGI, 0x10000000) \
	CONST(int, GL_TEXCOORD2_BIT_PGI, 0x20000000) \
	CONST(int, GL_TEXCOORD3_BIT_PGI, 0x40000000) \
	CONST(int, GL_TEXCOORD4_BIT_PGI, 0x80000000) \
	CONST(int, GL_VERTEX23_BIT_PGI, 0x00000004) \
	CONST(int, GL_VERTEX4_BIT_PGI, 0x00000008) \
	END()
#else
#define EXTENSION_GL_PGI_vertex_hints(NAME, FUNC, CONST, END)
#endif

#ifndef GL_REND_screen_coordinates
#define GL_REND_screen_coordinates 1
#define EXTENSION_GL_REND_screen_coordinates(NAME, FUNC, CONST, END) \
	NAME(GL_REND_screen_coordinates) \
	CONST(int, GL_SCREEN_COORDINATES_REND, 0x8490) \
	CONST(int, GL_INVERTED_SCREEN_W_REND, 0x8491) \
	END()
#else
#define EXTENSION_GL_REND_screen_coordinates(NAME, FUNC, CONST, END)
#endif

#ifndef GL_S3_s3tc
#define GL_S3_s3tc 1
#define EXTENSION_GL_S3_s3tc(NAME, FUNC, CONST, END) \
	NAME(GL_S3_s3tc) \
	CONST(int, GL_RGB_S3TC, 0x83A0) \
	CONST(int, GL_RGB4_S3TC, 0x83A1) \
	CONST(int, GL_RGBA_S3TC, 0x83A2) \
	CONST(int, GL_RGBA4_S3TC, 0x83A3) \
	END()
#else
#define EXTENSION_GL_S3_s3tc(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SGIS_detail_texture
#define GL_SGIS_detail_texture 1
#define EXTENSION_GL_SGIS_detail_texture(NAME, FUNC, CONST, END) \
	NAME(GL_SGIS_detail_texture) \
	CONST(int, GL_DETAIL_TEXTURE_2D_SGIS, 0x8095) \
	CONST(int, GL_DETAIL_TEXTURE_2D_BINDING_SGIS, 0x8096) \
	CONST(int, GL_LINEAR_DETAIL_SGIS, 0x8097) \
	CONST(int, GL_LINEAR_DETAIL_ALPHA_SGIS, 0x8098) \
	CONST(int, GL_LINEAR_DETAIL_COLOR_SGIS, 0x8099) \
	CONST(int, GL_DETAIL_TEXTURE_LEVEL_SGIS, 0x809A) \
	CONST(int, GL_DETAIL_TEXTURE_MODE_SGIS, 0x809B) \
	CONST(int, GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS, 0x809C) \
	FUNC(void , glDetailTexFuncSGIS, GLDETAILTEXFUNCSGIS, (GLenum target , GLsizei n , const GLfloat * points ), (target, n, points)) \
	FUNC(void , glGetDetailTexFuncSGIS, GLGETDETAILTEXFUNCSGIS, (GLenum target , GLfloat * points ), (target, points)) \
	END()
#else
#define EXTENSION_GL_SGIS_detail_texture(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SGIS_fog_function
#define GL_SGIS_fog_function 1
#define EXTENSION_GL_SGIS_fog_function(NAME, FUNC, CONST, END) \
	NAME(GL_SGIS_fog_function) \
	CONST(int, GL_FOG_FUNC_SGIS, 0x812A) \
	CONST(int, GL_FOG_FUNC_POINTS_SGIS, 0x812B) \
	CONST(int, GL_MAX_FOG_FUNC_POINTS_SGIS, 0x812C) \
	FUNC(void , glFogFuncSGIS, GLFOGFUNCSGIS, (GLsizei n , const GLfloat * points ), (n, points)) \
	FUNC(void , glGetFogFuncSGIS, GLGETFOGFUNCSGIS, (GLfloat * points ), (points)) \
	END()
#else
#define EXTENSION_GL_SGIS_fog_function(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SGIS_generate_mipmap
#define GL_SGIS_generate_mipmap 1
#define EXTENSION_GL_SGIS_generate_mipmap(NAME, FUNC, CONST, END) \
	NAME(GL_SGIS_generate_mipmap) \
	CONST(int, GL_GENERATE_MIPMAP_SGIS, 0x8191) \
	CONST(int, GL_GENERATE_MIPMAP_HINT_SGIS, 0x8192) \
	END()
#else
#define EXTENSION_GL_SGIS_generate_mipmap(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SGIS_multisample
#define GL_SGIS_multisample 1
#define EXTENSION_GL_SGIS_multisample(NAME, FUNC, CONST, END) \
	NAME(GL_SGIS_multisample) \
	CONST(int, GL_MULTISAMPLE_SGIS, 0x809D) \
	CONST(int, GL_SAMPLE_ALPHA_TO_MASK_SGIS, 0x809E) \
	CONST(int, GL_SAMPLE_ALPHA_TO_ONE_SGIS, 0x809F) \
	CONST(int, GL_SAMPLE_MASK_SGIS, 0x80A0) \
	CONST(int, GL_1PASS_SGIS, 0x80A1) \
	CONST(int, GL_2PASS_0_SGIS, 0x80A2) \
	CONST(int, GL_2PASS_1_SGIS, 0x80A3) \
	CONST(int, GL_4PASS_0_SGIS, 0x80A4) \
	CONST(int, GL_4PASS_1_SGIS, 0x80A5) \
	CONST(int, GL_4PASS_2_SGIS, 0x80A6) \
	CONST(int, GL_4PASS_3_SGIS, 0x80A7) \
	CONST(int, GL_SAMPLE_BUFFERS_SGIS, 0x80A8) \
	CONST(int, GL_SAMPLES_SGIS, 0x80A9) \
	CONST(int, GL_SAMPLE_MASK_VALUE_SGIS, 0x80AA) \
	CONST(int, GL_SAMPLE_MASK_INVERT_SGIS, 0x80AB) \
	CONST(int, GL_SAMPLE_PATTERN_SGIS, 0x80AC) \
	FUNC(void , glSampleMaskSGIS, GLSAMPLEMASKSGIS, (GLclampf value , GLboolean invert ), (value, invert)) \
	FUNC(void , glSamplePatternSGIS, GLSAMPLEPATTERNSGIS, (GLenum pattern ), (pattern)) \
	END()
#else
#define EXTENSION_GL_SGIS_multisample(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SGIS_pixel_texture
#define GL_SGIS_pixel_texture 1
#define EXTENSION_GL_SGIS_pixel_texture(NAME, FUNC, CONST, END) \
	NAME(GL_SGIS_pixel_texture) \
	CONST(int, GL_PIXEL_TEXTURE_SGIS, 0x8353) \
	CONST(int, GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS, 0x8354) \
	CONST(int, GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS, 0x8355) \
	CONST(int, GL_PIXEL_GROUP_COLOR_SGIS, 0x8356) \
	FUNC(void , glPixelTexGenParameteriSGIS, GLPIXELTEXGENPARAMETERISGIS, (GLenum pname , GLint param ), (pname, param)) \
	FUNC(void , glPixelTexGenParameterivSGIS, GLPIXELTEXGENPARAMETERIVSGIS, (GLenum pname , const GLint * params ), (pname, params)) \
	FUNC(void , glPixelTexGenParameterfSGIS, GLPIXELTEXGENPARAMETERFSGIS, (GLenum pname , GLfloat param ), (pname, param)) \
	FUNC(void , glPixelTexGenParameterfvSGIS, GLPIXELTEXGENPARAMETERFVSGIS, (GLenum pname , const GLfloat * params ), (pname, params)) \
	FUNC(void , glGetPixelTexGenParameterivSGIS, GLGETPIXELTEXGENPARAMETERIVSGIS, (GLenum pname , GLint * params ), (pname, params)) \
	FUNC(void , glGetPixelTexGenParameterfvSGIS, GLGETPIXELTEXGENPARAMETERFVSGIS, (GLenum pname , GLfloat * params ), (pname, params)) \
	END()
#else
#define EXTENSION_GL_SGIS_pixel_texture(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SGIS_point_line_texgen
#define GL_SGIS_point_line_texgen 1
#define EXTENSION_GL_SGIS_point_line_texgen(NAME, FUNC, CONST, END) \
	NAME(GL_SGIS_point_line_texgen) \
	CONST(int, GL_EYE_DISTANCE_TO_POINT_SGIS, 0x81F0) \
	CONST(int, GL_OBJECT_DISTANCE_TO_POINT_SGIS, 0x81F1) \
	CONST(int, GL_EYE_DISTANCE_TO_LINE_SGIS, 0x81F2) \
	CONST(int, GL_OBJECT_DISTANCE_TO_LINE_SGIS, 0x81F3) \
	CONST(int, GL_EYE_POINT_SGIS, 0x81F4) \
	CONST(int, GL_OBJECT_POINT_SGIS, 0x81F5) \
	CONST(int, GL_EYE_LINE_SGIS, 0x81F6) \
	CONST(int, GL_OBJECT_LINE_SGIS, 0x81F7) \
	END()
#else
#define EXTENSION_GL_SGIS_point_line_texgen(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SGIS_point_parameters
#define GL_SGIS_point_parameters 1
#define EXTENSION_GL_SGIS_point_parameters(NAME, FUNC, CONST, END) \
	NAME(GL_SGIS_point_parameters) \
	CONST(int, GL_POINT_SIZE_MIN_SGIS, 0x8126) \
	CONST(int, GL_POINT_SIZE_MAX_SGIS, 0x8127) \
	CONST(int, GL_POINT_FADE_THRESHOLD_SIZE_SGIS, 0x8128) \
	CONST(int, GL_DISTANCE_ATTENUATION_SGIS, 0x8129) \
	FUNC(void , glPointParameterfSGIS, GLPOINTPARAMETERFSGIS, (GLenum pname , GLfloat param ), (pname, param)) \
	FUNC(void , glPointParameterfvSGIS, GLPOINTPARAMETERFVSGIS, (GLenum pname , const GLfloat * params ), (pname, params)) \
	END()
#else
#define EXTENSION_GL_SGIS_point_parameters(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SGIS_sharpen_texture
#define GL_SGIS_sharpen_texture 1
#define EXTENSION_GL_SGIS_sharpen_texture(NAME, FUNC, CONST, END) \
	NAME(GL_SGIS_sharpen_texture) \
	CONST(int, GL_LINEAR_SHARPEN_SGIS, 0x80AD) \
	CONST(int, GL_LINEAR_SHARPEN_ALPHA_SGIS, 0x80AE) \
	CONST(int, GL_LINEAR_SHARPEN_COLOR_SGIS, 0x80AF) \
	CONST(int, GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS, 0x80B0) \
	FUNC(void , glSharpenTexFuncSGIS, GLSHARPENTEXFUNCSGIS, (GLenum target , GLsizei n , const GLfloat * points ), (target, n, points)) \
	FUNC(void , glGetSharpenTexFuncSGIS, GLGETSHARPENTEXFUNCSGIS, (GLenum target , GLfloat * points ), (target, points)) \
	END()
#else
#define EXTENSION_GL_SGIS_sharpen_texture(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SGIS_texture4D
#define GL_SGIS_texture4D 1
#define EXTENSION_GL_SGIS_texture4D(NAME, FUNC, CONST, END) \
	NAME(GL_SGIS_texture4D) \
	CONST(int, GL_PACK_SKIP_VOLUMES_SGIS, 0x8130) \
	CONST(int, GL_PACK_IMAGE_DEPTH_SGIS, 0x8131) \
	CONST(int, GL_UNPACK_SKIP_VOLUMES_SGIS, 0x8132) \
	CONST(int, GL_UNPACK_IMAGE_DEPTH_SGIS, 0x8133) \
	CONST(int, GL_TEXTURE_4D_SGIS, 0x8134) \
	CONST(int, GL_PROXY_TEXTURE_4D_SGIS, 0x8135) \
	CONST(int, GL_TEXTURE_4DSIZE_SGIS, 0x8136) \
	CONST(int, GL_TEXTURE_WRAP_Q_SGIS, 0x8137) \
	CONST(int, GL_MAX_4D_TEXTURE_SIZE_SGIS, 0x8138) \
	CONST(int, GL_TEXTURE_4D_BINDING_SGIS, 0x814F) \
	FUNC(void , glTexImage4DSGIS, GLTEXIMAGE4DSGIS, (GLenum target , GLint level , GLenum internalformat , GLsizei width , GLsizei height , GLsizei depth , GLsizei size4d , GLint border , GLenum format , GLenum type , const GLvoid * pixels ), (target, level, internalformat, width, height, depth, size4d, border, format, type, pixels)) \
	FUNC(void , glTexSubImage4DSGIS, GLTEXSUBIMAGE4DSGIS, (GLenum target , GLint level , GLint xoffset , GLint yoffset , GLint zoffset , GLint woffset , GLsizei width , GLsizei height , GLsizei depth , GLsizei size4d , GLenum format , GLenum type , const GLvoid * pixels ), (target, level, xoffset, yoffset, zoffset, woffset, width, height, depth, size4d, format, type, pixels)) \
	END()
#else
#define EXTENSION_GL_SGIS_texture4D(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SGIS_texture_border_clamp
#define GL_SGIS_texture_border_clamp 1
#define EXTENSION_GL_SGIS_texture_border_clamp(NAME, FUNC, CONST, END) \
	NAME(GL_SGIS_texture_border_clamp) \
	CONST(int, GL_CLAMP_TO_BORDER_SGIS, 0x812D) \
	END()
#else
#define EXTENSION_GL_SGIS_texture_border_clamp(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SGIS_texture_color_mask
#define GL_SGIS_texture_color_mask 1
#define EXTENSION_GL_SGIS_texture_color_mask(NAME, FUNC, CONST, END) \
	NAME(GL_SGIS_texture_color_mask) \
	CONST(int, GL_TEXTURE_COLOR_WRITEMASK_SGIS, 0x81EF) \
	FUNC(void , glTextureColorMaskSGIS, GLTEXTURECOLORMASKSGIS, (GLboolean red , GLboolean green , GLboolean blue , GLboolean alpha ), (red, green, blue, alpha)) \
	END()
#else
#define EXTENSION_GL_SGIS_texture_color_mask(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SGIS_texture_edge_clamp
#define GL_SGIS_texture_edge_clamp 1
#define EXTENSION_GL_SGIS_texture_edge_clamp(NAME, FUNC, CONST, END) \
	NAME(GL_SGIS_texture_edge_clamp) \
	CONST(int, GL_CLAMP_TO_EDGE_SGIS, 0x812F) \
	END()
#else
#define EXTENSION_GL_SGIS_texture_edge_clamp(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SGIS_texture_filter4
#define GL_SGIS_texture_filter4 1
#define EXTENSION_GL_SGIS_texture_filter4(NAME, FUNC, CONST, END) \
	NAME(GL_SGIS_texture_filter4) \
	CONST(int, GL_FILTER4_SGIS, 0x8146) \
	CONST(int, GL_TEXTURE_FILTER4_SIZE_SGIS, 0x8147) \
	FUNC(void , glGetTexFilterFuncSGIS, GLGETTEXFILTERFUNCSGIS, (GLenum target , GLenum filter , GLfloat * weights ), (target, filter, weights)) \
	FUNC(void , glTexFilterFuncSGIS, GLTEXFILTERFUNCSGIS, (GLenum target , GLenum filter , GLsizei n , const GLfloat * weights ), (target, filter, n, weights)) \
	END()
#else
#define EXTENSION_GL_SGIS_texture_filter4(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SGIS_texture_lod
#define GL_SGIS_texture_lod 1
#define EXTENSION_GL_SGIS_texture_lod(NAME, FUNC, CONST, END) \
	NAME(GL_SGIS_texture_lod) \
	CONST(int, GL_TEXTURE_MIN_LOD_SGIS, 0x813A) \
	CONST(int, GL_TEXTURE_MAX_LOD_SGIS, 0x813B) \
	CONST(int, GL_TEXTURE_BASE_LEVEL_SGIS, 0x813C) \
	CONST(int, GL_TEXTURE_MAX_LEVEL_SGIS, 0x813D) \
	END()
#else
#define EXTENSION_GL_SGIS_texture_lod(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SGIS_texture_select
#define GL_SGIS_texture_select 1
#define EXTENSION_GL_SGIS_texture_select(NAME, FUNC, CONST, END) \
	NAME(GL_SGIS_texture_select) \
	CONST(int, GL_DUAL_ALPHA4_SGIS, 0x8110) \
	CONST(int, GL_DUAL_ALPHA8_SGIS, 0x8111) \
	CONST(int, GL_DUAL_ALPHA12_SGIS, 0x8112) \
	CONST(int, GL_DUAL_ALPHA16_SGIS, 0x8113) \
	CONST(int, GL_DUAL_LUMINANCE4_SGIS, 0x8114) \
	CONST(int, GL_DUAL_LUMINANCE8_SGIS, 0x8115) \
	CONST(int, GL_DUAL_LUMINANCE12_SGIS, 0x8116) \
	CONST(int, GL_DUAL_LUMINANCE16_SGIS, 0x8117) \
	CONST(int, GL_DUAL_INTENSITY4_SGIS, 0x8118) \
	CONST(int, GL_DUAL_INTENSITY8_SGIS, 0x8119) \
	CONST(int, GL_DUAL_INTENSITY12_SGIS, 0x811A) \
	CONST(int, GL_DUAL_INTENSITY16_SGIS, 0x811B) \
	CONST(int, GL_DUAL_LUMINANCE_ALPHA4_SGIS, 0x811C) \
	CONST(int, GL_DUAL_LUMINANCE_ALPHA8_SGIS, 0x811D) \
	CONST(int, GL_QUAD_ALPHA4_SGIS, 0x811E) \
	CONST(int, GL_QUAD_ALPHA8_SGIS, 0x811F) \
	CONST(int, GL_QUAD_LUMINANCE4_SGIS, 0x8120) \
	CONST(int, GL_QUAD_LUMINANCE8_SGIS, 0x8121) \
	CONST(int, GL_QUAD_INTENSITY4_SGIS, 0x8122) \
	CONST(int, GL_QUAD_INTENSITY8_SGIS, 0x8123) \
	CONST(int, GL_DUAL_TEXTURE_SELECT_SGIS, 0x8124) \
	CONST(int, GL_QUAD_TEXTURE_SELECT_SGIS, 0x8125) \
	END()
#else
#define EXTENSION_GL_SGIS_texture_select(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SGIX_async
#define GL_SGIX_async 1
#define EXTENSION_GL_SGIX_async(NAME, FUNC, CONST, END) \
	NAME(GL_SGIX_async) \
	CONST(int, GL_ASYNC_MARKER_SGIX, 0x8329) \
	FUNC(void , glAsyncMarkerSGIX, GLASYNCMARKERSGIX, (GLuint marker ), (marker)) \
	FUNC(GLint , glFinishAsyncSGIX, GLFINISHASYNCSGIX, (GLuint * markerp ), (markerp)) \
	FUNC(GLint , glPollAsyncSGIX, GLPOLLASYNCSGIX, (GLuint * markerp ), (markerp)) \
	FUNC(GLuint , glGenAsyncMarkersSGIX, GLGENASYNCMARKERSSGIX, (GLsizei range ), (range)) \
	FUNC(void , glDeleteAsyncMarkersSGIX, GLDELETEASYNCMARKERSSGIX, (GLuint marker , GLsizei range ), (marker, range)) \
	FUNC(GLboolean , glIsAsyncMarkerSGIX, GLISASYNCMARKERSGIX, (GLuint marker ), (marker)) \
	END()
#else
#define EXTENSION_GL_SGIX_async(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SGIX_async_histogram
#define GL_SGIX_async_histogram 1
#define EXTENSION_GL_SGIX_async_histogram(NAME, FUNC, CONST, END) \
	NAME(GL_SGIX_async_histogram) \
	CONST(int, GL_ASYNC_HISTOGRAM_SGIX, 0x832C) \
	CONST(int, GL_MAX_ASYNC_HISTOGRAM_SGIX, 0x832D) \
	END()
#else
#define EXTENSION_GL_SGIX_async_histogram(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SGIX_async_pixel
#define GL_SGIX_async_pixel 1
#define EXTENSION_GL_SGIX_async_pixel(NAME, FUNC, CONST, END) \
	NAME(GL_SGIX_async_pixel) \
	CONST(int, GL_ASYNC_TEX_IMAGE_SGIX, 0x835C) \
	CONST(int, GL_ASYNC_DRAW_PIXELS_SGIX, 0x835D) \
	CONST(int, GL_ASYNC_READ_PIXELS_SGIX, 0x835E) \
	CONST(int, GL_MAX_ASYNC_TEX_IMAGE_SGIX, 0x835F) \
	CONST(int, GL_MAX_ASYNC_DRAW_PIXELS_SGIX, 0x8360) \
	CONST(int, GL_MAX_ASYNC_READ_PIXELS_SGIX, 0x8361) \
	END()
#else
#define EXTENSION_GL_SGIX_async_pixel(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SGIX_blend_alpha_minmax
#define GL_SGIX_blend_alpha_minmax 1
#define EXTENSION_GL_SGIX_blend_alpha_minmax(NAME, FUNC, CONST, END) \
	NAME(GL_SGIX_blend_alpha_minmax) \
	CONST(int, GL_ALPHA_MIN_SGIX, 0x8320) \
	CONST(int, GL_ALPHA_MAX_SGIX, 0x8321) \
	END()
#else
#define EXTENSION_GL_SGIX_blend_alpha_minmax(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SGIX_calligraphic_fragment
#define GL_SGIX_calligraphic_fragment 1
#define EXTENSION_GL_SGIX_calligraphic_fragment(NAME, FUNC, CONST, END) \
	NAME(GL_SGIX_calligraphic_fragment) \
	CONST(int, GL_CALLIGRAPHIC_FRAGMENT_SGIX, 0x8183) \
	END()
#else
#define EXTENSION_GL_SGIX_calligraphic_fragment(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SGIX_clipmap
#define GL_SGIX_clipmap 1
#define EXTENSION_GL_SGIX_clipmap(NAME, FUNC, CONST, END) \
	NAME(GL_SGIX_clipmap) \
	CONST(int, GL_LINEAR_CLIPMAP_LINEAR_SGIX, 0x8170) \
	CONST(int, GL_TEXTURE_CLIPMAP_CENTER_SGIX, 0x8171) \
	CONST(int, GL_TEXTURE_CLIPMAP_FRAME_SGIX, 0x8172) \
	CONST(int, GL_TEXTURE_CLIPMAP_OFFSET_SGIX, 0x8173) \
	CONST(int, GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX, 0x8174) \
	CONST(int, GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX, 0x8175) \
	CONST(int, GL_TEXTURE_CLIPMAP_DEPTH_SGIX, 0x8176) \
	CONST(int, GL_MAX_CLIPMAP_DEPTH_SGIX, 0x8177) \
	CONST(int, GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX, 0x8178) \
	CONST(int, GL_NEAREST_CLIPMAP_NEAREST_SGIX, 0x844D) \
	CONST(int, GL_NEAREST_CLIPMAP_LINEAR_SGIX, 0x844E) \
	CONST(int, GL_LINEAR_CLIPMAP_NEAREST_SGIX, 0x844F) \
	END()
#else
#define EXTENSION_GL_SGIX_clipmap(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SGIX_convolution_accuracy
#define GL_SGIX_convolution_accuracy 1
#define EXTENSION_GL_SGIX_convolution_accuracy(NAME, FUNC, CONST, END) \
	NAME(GL_SGIX_convolution_accuracy) \
	CONST(int, GL_CONVOLUTION_HINT_SGIX, 0x8316) \
	END()
#else
#define EXTENSION_GL_SGIX_convolution_accuracy(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SGIX_depth_texture
#define GL_SGIX_depth_texture 1
#define EXTENSION_GL_SGIX_depth_texture(NAME, FUNC, CONST, END) \
	NAME(GL_SGIX_depth_texture) \
	CONST(int, GL_DEPTH_COMPONENT16_SGIX, 0x81A5) \
	CONST(int, GL_DEPTH_COMPONENT24_SGIX, 0x81A6) \
	CONST(int, GL_DEPTH_COMPONENT32_SGIX, 0x81A7) \
	END()
#else
#define EXTENSION_GL_SGIX_depth_texture(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SGIX_flush_raster
#define GL_SGIX_flush_raster 1
#define EXTENSION_GL_SGIX_flush_raster(NAME, FUNC, CONST, END) \
	NAME(GL_SGIX_flush_raster) \
	FUNC(void , glFlushRasterSGIX, GLFLUSHRASTERSGIX, (void ), ()) \
	END()
#else
#define EXTENSION_GL_SGIX_flush_raster(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SGIX_fog_offset
#define GL_SGIX_fog_offset 1
#define EXTENSION_GL_SGIX_fog_offset(NAME, FUNC, CONST, END) \
	NAME(GL_SGIX_fog_offset) \
	CONST(int, GL_FOG_OFFSET_SGIX, 0x8198) \
	CONST(int, GL_FOG_OFFSET_VALUE_SGIX, 0x8199) \
	END()
#else
#define EXTENSION_GL_SGIX_fog_offset(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SGIX_fog_scale
#define GL_SGIX_fog_scale 1
#define EXTENSION_GL_SGIX_fog_scale(NAME, FUNC, CONST, END) \
	NAME(GL_SGIX_fog_scale) \
	CONST(int, GL_FOG_SCALE_SGIX, 0x81FC) \
	CONST(int, GL_FOG_SCALE_VALUE_SGIX, 0x81FD) \
	END()
#else
#define EXTENSION_GL_SGIX_fog_scale(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SGIX_fragment_lighting
#define GL_SGIX_fragment_lighting 1
#define EXTENSION_GL_SGIX_fragment_lighting(NAME, FUNC, CONST, END) \
	NAME(GL_SGIX_fragment_lighting) \
	CONST(int, GL_FRAGMENT_LIGHTING_SGIX, 0x8400) \
	CONST(int, GL_FRAGMENT_COLOR_MATERIAL_SGIX, 0x8401) \
	CONST(int, GL_FRAGMENT_COLOR_MATERIAL_FACE_SGIX, 0x8402) \
	CONST(int, GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX, 0x8403) \
	CONST(int, GL_MAX_FRAGMENT_LIGHTS_SGIX, 0x8404) \
	CONST(int, GL_MAX_ACTIVE_LIGHTS_SGIX, 0x8405) \
	CONST(int, GL_CURRENT_RASTER_NORMAL_SGIX, 0x8406) \
	CONST(int, GL_LIGHT_ENV_MODE_SGIX, 0x8407) \
	CONST(int, GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX, 0x8408) \
	CONST(int, GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX, 0x8409) \
	CONST(int, GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX, 0x840A) \
	CONST(int, GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX, 0x840B) \
	CONST(int, GL_FRAGMENT_LIGHT0_SGIX, 0x840C) \
	CONST(int, GL_FRAGMENT_LIGHT1_SGIX, 0x840D) \
	CONST(int, GL_FRAGMENT_LIGHT2_SGIX, 0x840E) \
	CONST(int, GL_FRAGMENT_LIGHT3_SGIX, 0x840F) \
	CONST(int, GL_FRAGMENT_LIGHT4_SGIX, 0x8410) \
	CONST(int, GL_FRAGMENT_LIGHT5_SGIX, 0x8411) \
	CONST(int, GL_FRAGMENT_LIGHT6_SGIX, 0x8412) \
	CONST(int, GL_FRAGMENT_LIGHT7_SGIX, 0x8413) \
	FUNC(void , glFragmentColorMaterialSGIX, GLFRAGMENTCOLORMATERIALSGIX, (GLenum face , GLenum mode ), (face, mode)) \
	FUNC(void , glFragmentLightfSGIX, GLFRAGMENTLIGHTFSGIX, (GLenum light , GLenum pname , GLfloat param ), (light, pname, param)) \
	FUNC(void , glFragmentLightfvSGIX, GLFRAGMENTLIGHTFVSGIX, (GLenum light , GLenum pname , const GLfloat * params ), (light, pname, params)) \
	FUNC(void , glFragmentLightiSGIX, GLFRAGMENTLIGHTISGIX, (GLenum light , GLenum pname , GLint param ), (light, pname, param)) \
	FUNC(void , glFragmentLightivSGIX, GLFRAGMENTLIGHTIVSGIX, (GLenum light , GLenum pname , const GLint * params ), (light, pname, params)) \
	FUNC(void , glFragmentLightModelfSGIX, GLFRAGMENTLIGHTMODELFSGIX, (GLenum pname , GLfloat param ), (pname, param)) \
	FUNC(void , glFragmentLightModelfvSGIX, GLFRAGMENTLIGHTMODELFVSGIX, (GLenum pname , const GLfloat * params ), (pname, params)) \
	FUNC(void , glFragmentLightModeliSGIX, GLFRAGMENTLIGHTMODELISGIX, (GLenum pname , GLint param ), (pname, param)) \
	FUNC(void , glFragmentLightModelivSGIX, GLFRAGMENTLIGHTMODELIVSGIX, (GLenum pname , const GLint * params ), (pname, params)) \
	FUNC(void , glFragmentMaterialfSGIX, GLFRAGMENTMATERIALFSGIX, (GLenum face , GLenum pname , GLfloat param ), (face, pname, param)) \
	FUNC(void , glFragmentMaterialfvSGIX, GLFRAGMENTMATERIALFVSGIX, (GLenum face , GLenum pname , const GLfloat * params ), (face, pname, params)) \
	FUNC(void , glFragmentMaterialiSGIX, GLFRAGMENTMATERIALISGIX, (GLenum face , GLenum pname , GLint param ), (face, pname, param)) \
	FUNC(void , glFragmentMaterialivSGIX, GLFRAGMENTMATERIALIVSGIX, (GLenum face , GLenum pname , const GLint * params ), (face, pname, params)) \
	FUNC(void , glGetFragmentLightfvSGIX, GLGETFRAGMENTLIGHTFVSGIX, (GLenum light , GLenum pname , GLfloat * params ), (light, pname, params)) \
	FUNC(void , glGetFragmentLightivSGIX, GLGETFRAGMENTLIGHTIVSGIX, (GLenum light , GLenum pname , GLint * params ), (light, pname, params)) \
	FUNC(void , glGetFragmentMaterialfvSGIX, GLGETFRAGMENTMATERIALFVSGIX, (GLenum face , GLenum pname , GLfloat * params ), (face, pname, params)) \
	FUNC(void , glGetFragmentMaterialivSGIX, GLGETFRAGMENTMATERIALIVSGIX, (GLenum face , GLenum pname , GLint * params ), (face, pname, params)) \
	FUNC(void , glLightEnviSGIX, GLLIGHTENVISGIX, (GLenum pname , GLint param ), (pname, param)) \
	END()
#else
#define EXTENSION_GL_SGIX_fragment_lighting(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SGIX_framezoom
#define GL_SGIX_framezoom 1
#define EXTENSION_GL_SGIX_framezoom(NAME, FUNC, CONST, END) \
	NAME(GL_SGIX_framezoom) \
	CONST(int, GL_FRAMEZOOM_SGIX, 0x818B) \
	CONST(int, GL_FRAMEZOOM_FACTOR_SGIX, 0x818C) \
	CONST(int, GL_MAX_FRAMEZOOM_FACTOR_SGIX, 0x818D) \
	FUNC(void , glFrameZoomSGIX, GLFRAMEZOOMSGIX, (GLint factor ), (factor)) \
	END()
#else
#define EXTENSION_GL_SGIX_framezoom(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SGIX_igloo_interface
#define GL_SGIX_igloo_interface 1
#define EXTENSION_GL_SGIX_igloo_interface(NAME, FUNC, CONST, END) \
	NAME(GL_SGIX_igloo_interface) \
	FUNC(void , glIglooInterfaceSGIX, GLIGLOOINTERFACESGIX, (GLenum pname , const GLvoid * params ), (pname, params)) \
	END()
#else
#define EXTENSION_GL_SGIX_igloo_interface(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SGIX_impact_pixel_texture
#define GL_SGIX_impact_pixel_texture 1
#define EXTENSION_GL_SGIX_impact_pixel_texture(NAME, FUNC, CONST, END) \
	NAME(GL_SGIX_impact_pixel_texture) \
	CONST(int, GL_PIXEL_TEX_GEN_Q_CEILING_SGIX, 0x8184) \
	CONST(int, GL_PIXEL_TEX_GEN_Q_ROUND_SGIX, 0x8185) \
	CONST(int, GL_PIXEL_TEX_GEN_Q_FLOOR_SGIX, 0x8186) \
	CONST(int, GL_PIXEL_TEX_GEN_ALPHA_REPLACE_SGIX, 0x8187) \
	CONST(int, GL_PIXEL_TEX_GEN_ALPHA_NO_REPLACE_SGIX, 0x8188) \
	CONST(int, GL_PIXEL_TEX_GEN_ALPHA_LS_SGIX, 0x8189) \
	CONST(int, GL_PIXEL_TEX_GEN_ALPHA_MS_SGIX, 0x818A) \
	END()
#else
#define EXTENSION_GL_SGIX_impact_pixel_texture(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SGIX_instruments
#define GL_SGIX_instruments 1
#define EXTENSION_GL_SGIX_instruments(NAME, FUNC, CONST, END) \
	NAME(GL_SGIX_instruments) \
	CONST(int, GL_INSTRUMENT_BUFFER_POINTER_SGIX, 0x8180) \
	CONST(int, GL_INSTRUMENT_MEASUREMENTS_SGIX, 0x8181) \
	FUNC(GLint , glGetInstrumentsSGIX, GLGETINSTRUMENTSSGIX, (void ), ()) \
	FUNC(void , glInstrumentsBufferSGIX, GLINSTRUMENTSBUFFERSGIX, (GLsizei size , GLint * buffer ), (size, buffer)) \
	FUNC(GLint , glPollInstrumentsSGIX, GLPOLLINSTRUMENTSSGIX, (GLint * marker_p ), (marker_p)) \
	FUNC(void , glReadInstrumentsSGIX, GLREADINSTRUMENTSSGIX, (GLint marker ), (marker)) \
	FUNC(void , glStartInstrumentsSGIX, GLSTARTINSTRUMENTSSGIX, (void ), ()) \
	FUNC(void , glStopInstrumentsSGIX, GLSTOPINSTRUMENTSSGIX, (GLint marker ), (marker)) \
	END()
#else
#define EXTENSION_GL_SGIX_instruments(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SGIX_interlace
#define GL_SGIX_interlace 1
#define EXTENSION_GL_SGIX_interlace(NAME, FUNC, CONST, END) \
	NAME(GL_SGIX_interlace) \
	CONST(int, GL_INTERLACE_SGIX, 0x8094) \
	END()
#else
#define EXTENSION_GL_SGIX_interlace(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SGIX_ir_instrument1
#define GL_SGIX_ir_instrument1 1
#define EXTENSION_GL_SGIX_ir_instrument1(NAME, FUNC, CONST, END) \
	NAME(GL_SGIX_ir_instrument1) \
	CONST(int, GL_IR_INSTRUMENT1_SGIX, 0x817F) \
	END()
#else
#define EXTENSION_GL_SGIX_ir_instrument1(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SGIX_list_priority
#define GL_SGIX_list_priority 1
#define EXTENSION_GL_SGIX_list_priority(NAME, FUNC, CONST, END) \
	NAME(GL_SGIX_list_priority) \
	CONST(int, GL_LIST_PRIORITY_SGIX, 0x8182) \
	FUNC(void , glGetListParameterfvSGIX, GLGETLISTPARAMETERFVSGIX, (GLuint list , GLenum pname , GLfloat * params ), (list, pname, params)) \
	FUNC(void , glGetListParameterivSGIX, GLGETLISTPARAMETERIVSGIX, (GLuint list , GLenum pname , GLint * params ), (list, pname, params)) \
	FUNC(void , glListParameterfSGIX, GLLISTPARAMETERFSGIX, (GLuint list , GLenum pname , GLfloat param ), (list, pname, param)) \
	FUNC(void , glListParameterfvSGIX, GLLISTPARAMETERFVSGIX, (GLuint list , GLenum pname , const GLfloat * params ), (list, pname, params)) \
	FUNC(void , glListParameteriSGIX, GLLISTPARAMETERISGIX, (GLuint list , GLenum pname , GLint param ), (list, pname, param)) \
	FUNC(void , glListParameterivSGIX, GLLISTPARAMETERIVSGIX, (GLuint list , GLenum pname , const GLint * params ), (list, pname, params)) \
	END()
#else
#define EXTENSION_GL_SGIX_list_priority(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SGIX_pixel_texture
#define GL_SGIX_pixel_texture 1
#define EXTENSION_GL_SGIX_pixel_texture(NAME, FUNC, CONST, END) \
	NAME(GL_SGIX_pixel_texture) \
	CONST(int, GL_PIXEL_TEX_GEN_SGIX, 0x8139) \
	CONST(int, GL_PIXEL_TEX_GEN_MODE_SGIX, 0x832B) \
	FUNC(void , glPixelTexGenSGIX, GLPIXELTEXGENSGIX, (GLenum mode ), (mode)) \
	END()
#else
#define EXTENSION_GL_SGIX_pixel_texture(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SGIX_pixel_tiles
#define GL_SGIX_pixel_tiles 1
#define EXTENSION_GL_SGIX_pixel_tiles(NAME, FUNC, CONST, END) \
	NAME(GL_SGIX_pixel_tiles) \
	CONST(int, GL_PIXEL_TILE_BEST_ALIGNMENT_SGIX, 0x813E) \
	CONST(int, GL_PIXEL_TILE_CACHE_INCREMENT_SGIX, 0x813F) \
	CONST(int, GL_PIXEL_TILE_WIDTH_SGIX, 0x8140) \
	CONST(int, GL_PIXEL_TILE_HEIGHT_SGIX, 0x8141) \
	CONST(int, GL_PIXEL_TILE_GRID_WIDTH_SGIX, 0x8142) \
	CONST(int, GL_PIXEL_TILE_GRID_HEIGHT_SGIX, 0x8143) \
	CONST(int, GL_PIXEL_TILE_GRID_DEPTH_SGIX, 0x8144) \
	CONST(int, GL_PIXEL_TILE_CACHE_SIZE_SGIX, 0x8145) \
	END()
#else
#define EXTENSION_GL_SGIX_pixel_tiles(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SGIX_polynomial_ffd
#define GL_SGIX_polynomial_ffd 1
#define EXTENSION_GL_SGIX_polynomial_ffd(NAME, FUNC, CONST, END) \
	NAME(GL_SGIX_polynomial_ffd) \
	CONST(int, GL_GEOMETRY_DEFORMATION_SGIX, 0x8194) \
	CONST(int, GL_TEXTURE_DEFORMATION_SGIX, 0x8195) \
	CONST(int, GL_DEFORMATIONS_MASK_SGIX, 0x8196) \
	CONST(int, GL_MAX_DEFORMATION_ORDER_SGIX, 0x8197) \
	FUNC(void , glDeformationMap3dSGIX, GLDEFORMATIONMAP3DSGIX, (GLenum target , GLdouble u1 , GLdouble u2 , GLint ustride , GLint uorder , GLdouble v1 , GLdouble v2 , GLint vstride , GLint vorder , GLdouble w1 , GLdouble w2 , GLint wstride , GLint worder , const GLdouble * points ), (target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, w1, w2, wstride, worder, points)) \
	FUNC(void , glDeformationMap3fSGIX, GLDEFORMATIONMAP3FSGIX, (GLenum target , GLfloat u1 , GLfloat u2 , GLint ustride , GLint uorder , GLfloat v1 , GLfloat v2 , GLint vstride , GLint vorder , GLfloat w1 , GLfloat w2 , GLint wstride , GLint worder , const GLfloat * points ), (target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, w1, w2, wstride, worder, points)) \
	FUNC(void , glDeformSGIX, GLDEFORMSGIX, (GLbitfield mask ), (mask)) \
	FUNC(void , glLoadIdentityDeformationMapSGIX, GLLOADIDENTITYDEFORMATIONMAPSGIX, (GLbitfield mask ), (mask)) \
	END()
#else
#define EXTENSION_GL_SGIX_polynomial_ffd(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SGIX_reference_plane
#define GL_SGIX_reference_plane 1
#define EXTENSION_GL_SGIX_reference_plane(NAME, FUNC, CONST, END) \
	NAME(GL_SGIX_reference_plane) \
	CONST(int, GL_REFERENCE_PLANE_SGIX, 0x817D) \
	CONST(int, GL_REFERENCE_PLANE_EQUATION_SGIX, 0x817E) \
	FUNC(void , glReferencePlaneSGIX, GLREFERENCEPLANESGIX, (const GLdouble * equation ), (equation)) \
	END()
#else
#define EXTENSION_GL_SGIX_reference_plane(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SGIX_resample
#define GL_SGIX_resample 1
#define EXTENSION_GL_SGIX_resample(NAME, FUNC, CONST, END) \
	NAME(GL_SGIX_resample) \
	CONST(int, GL_PACK_RESAMPLE_SGIX, 0x842C) \
	CONST(int, GL_UNPACK_RESAMPLE_SGIX, 0x842D) \
	CONST(int, GL_RESAMPLE_REPLICATE_SGIX, 0x842E) \
	CONST(int, GL_RESAMPLE_ZERO_FILL_SGIX, 0x842F) \
	CONST(int, GL_RESAMPLE_DECIMATE_SGIX, 0x8430) \
	END()
#else
#define EXTENSION_GL_SGIX_resample(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SGIX_scalebias_hint
#define GL_SGIX_scalebias_hint 1
#define EXTENSION_GL_SGIX_scalebias_hint(NAME, FUNC, CONST, END) \
	NAME(GL_SGIX_scalebias_hint) \
	CONST(int, GL_SCALEBIAS_HINT_SGIX, 0x8322) \
	END()
#else
#define EXTENSION_GL_SGIX_scalebias_hint(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SGIX_shadow
#define GL_SGIX_shadow 1
#define EXTENSION_GL_SGIX_shadow(NAME, FUNC, CONST, END) \
	NAME(GL_SGIX_shadow) \
	CONST(int, GL_TEXTURE_COMPARE_SGIX, 0x819A) \
	CONST(int, GL_TEXTURE_COMPARE_OPERATOR_SGIX, 0x819B) \
	CONST(int, GL_TEXTURE_LEQUAL_R_SGIX, 0x819C) \
	CONST(int, GL_TEXTURE_GEQUAL_R_SGIX, 0x819D) \
	END()
#else
#define EXTENSION_GL_SGIX_shadow(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SGIX_shadow_ambient
#define GL_SGIX_shadow_ambient 1
#define EXTENSION_GL_SGIX_shadow_ambient(NAME, FUNC, CONST, END) \
	NAME(GL_SGIX_shadow_ambient) \
	CONST(int, GL_SHADOW_AMBIENT_SGIX, 0x80BF) \
	END()
#else
#define EXTENSION_GL_SGIX_shadow_ambient(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SGIX_sprite
#define GL_SGIX_sprite 1
#define EXTENSION_GL_SGIX_sprite(NAME, FUNC, CONST, END) \
	NAME(GL_SGIX_sprite) \
	CONST(int, GL_SPRITE_SGIX, 0x8148) \
	CONST(int, GL_SPRITE_MODE_SGIX, 0x8149) \
	CONST(int, GL_SPRITE_AXIS_SGIX, 0x814A) \
	CONST(int, GL_SPRITE_TRANSLATION_SGIX, 0x814B) \
	CONST(int, GL_SPRITE_AXIAL_SGIX, 0x814C) \
	CONST(int, GL_SPRITE_OBJECT_ALIGNED_SGIX, 0x814D) \
	CONST(int, GL_SPRITE_EYE_ALIGNED_SGIX, 0x814E) \
	FUNC(void , glSpriteParameterfSGIX, GLSPRITEPARAMETERFSGIX, (GLenum pname , GLfloat param ), (pname, param)) \
	FUNC(void , glSpriteParameterfvSGIX, GLSPRITEPARAMETERFVSGIX, (GLenum pname , const GLfloat * params ), (pname, params)) \
	FUNC(void , glSpriteParameteriSGIX, GLSPRITEPARAMETERISGIX, (GLenum pname , GLint param ), (pname, param)) \
	FUNC(void , glSpriteParameterivSGIX, GLSPRITEPARAMETERIVSGIX, (GLenum pname , const GLint * params ), (pname, params)) \
	END()
#else
#define EXTENSION_GL_SGIX_sprite(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SGIX_subsample
#define GL_SGIX_subsample 1
#define EXTENSION_GL_SGIX_subsample(NAME, FUNC, CONST, END) \
	NAME(GL_SGIX_subsample) \
	CONST(int, GL_PACK_SUBSAMPLE_RATE_SGIX, 0x85A0) \
	CONST(int, GL_UNPACK_SUBSAMPLE_RATE_SGIX, 0x85A1) \
	CONST(int, GL_PIXEL_SUBSAMPLE_4444_SGIX, 0x85A2) \
	CONST(int, GL_PIXEL_SUBSAMPLE_2424_SGIX, 0x85A3) \
	CONST(int, GL_PIXEL_SUBSAMPLE_4242_SGIX, 0x85A4) \
	END()
#else
#define EXTENSION_GL_SGIX_subsample(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SGIX_tag_sample_buffer
#define GL_SGIX_tag_sample_buffer 1
#define EXTENSION_GL_SGIX_tag_sample_buffer(NAME, FUNC, CONST, END) \
	NAME(GL_SGIX_tag_sample_buffer) \
	FUNC(void , glTagSampleBufferSGIX, GLTAGSAMPLEBUFFERSGIX, (void ), ()) \
	END()
#else
#define EXTENSION_GL_SGIX_tag_sample_buffer(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SGIX_texture_add_env
#define GL_SGIX_texture_add_env 1
#define EXTENSION_GL_SGIX_texture_add_env(NAME, FUNC, CONST, END) \
	NAME(GL_SGIX_texture_add_env) \
	CONST(int, GL_TEXTURE_ENV_BIAS_SGIX, 0x80BE) \
	END()
#else
#define EXTENSION_GL_SGIX_texture_add_env(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SGIX_texture_coordinate_clamp
#define GL_SGIX_texture_coordinate_clamp 1
#define EXTENSION_GL_SGIX_texture_coordinate_clamp(NAME, FUNC, CONST, END) \
	NAME(GL_SGIX_texture_coordinate_clamp) \
	CONST(int, GL_TEXTURE_MAX_CLAMP_S_SGIX, 0x8369) \
	CONST(int, GL_TEXTURE_MAX_CLAMP_T_SGIX, 0x836A) \
	CONST(int, GL_TEXTURE_MAX_CLAMP_R_SGIX, 0x836B) \
	END()
#else
#define EXTENSION_GL_SGIX_texture_coordinate_clamp(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SGIX_texture_lod_bias
#define GL_SGIX_texture_lod_bias 1
#define EXTENSION_GL_SGIX_texture_lod_bias(NAME, FUNC, CONST, END) \
	NAME(GL_SGIX_texture_lod_bias) \
	CONST(int, GL_TEXTURE_LOD_BIAS_S_SGIX, 0x818E) \
	CONST(int, GL_TEXTURE_LOD_BIAS_T_SGIX, 0x818F) \
	CONST(int, GL_TEXTURE_LOD_BIAS_R_SGIX, 0x8190) \
	END()
#else
#define EXTENSION_GL_SGIX_texture_lod_bias(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SGIX_texture_multi_buffer
#define GL_SGIX_texture_multi_buffer 1
#define EXTENSION_GL_SGIX_texture_multi_buffer(NAME, FUNC, CONST, END) \
	NAME(GL_SGIX_texture_multi_buffer) \
	CONST(int, GL_TEXTURE_MULTI_BUFFER_HINT_SGIX, 0x812E) \
	END()
#else
#define EXTENSION_GL_SGIX_texture_multi_buffer(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SGIX_texture_scale_bias
#define GL_SGIX_texture_scale_bias 1
#define EXTENSION_GL_SGIX_texture_scale_bias(NAME, FUNC, CONST, END) \
	NAME(GL_SGIX_texture_scale_bias) \
	CONST(int, GL_POST_TEXTURE_FILTER_BIAS_SGIX, 0x8179) \
	CONST(int, GL_POST_TEXTURE_FILTER_SCALE_SGIX, 0x817A) \
	CONST(int, GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX, 0x817B) \
	CONST(int, GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX, 0x817C) \
	END()
#else
#define EXTENSION_GL_SGIX_texture_scale_bias(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SGIX_vertex_preclip
#define GL_SGIX_vertex_preclip 1
#define EXTENSION_GL_SGIX_vertex_preclip(NAME, FUNC, CONST, END) \
	NAME(GL_SGIX_vertex_preclip) \
	CONST(int, GL_VERTEX_PRECLIP_SGIX, 0x83EE) \
	CONST(int, GL_VERTEX_PRECLIP_HINT_SGIX, 0x83EF) \
	END()
#else
#define EXTENSION_GL_SGIX_vertex_preclip(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SGIX_ycrcb
#define GL_SGIX_ycrcb 1
#define EXTENSION_GL_SGIX_ycrcb(NAME, FUNC, CONST, END) \
	NAME(GL_SGIX_ycrcb) \
	CONST(int, GL_YCRCB_422_SGIX, 0x81BB) \
	CONST(int, GL_YCRCB_444_SGIX, 0x81BC) \
	END()
#else
#define EXTENSION_GL_SGIX_ycrcb(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SGIX_ycrcb_subsample
#define GL_SGIX_ycrcb_subsample 1
#define EXTENSION_GL_SGIX_ycrcb_subsample(NAME, FUNC, CONST, END) \
	NAME(GL_SGIX_ycrcb_subsample) \
	END()
#else
#define EXTENSION_GL_SGIX_ycrcb_subsample(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SGIX_ycrcba
#define GL_SGIX_ycrcba 1
#define EXTENSION_GL_SGIX_ycrcba(NAME, FUNC, CONST, END) \
	NAME(GL_SGIX_ycrcba) \
	CONST(int, GL_YCRCB_SGIX, 0x8318) \
	CONST(int, GL_YCRCBA_SGIX, 0x8319) \
	END()
#else
#define EXTENSION_GL_SGIX_ycrcba(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SGI_color_matrix
#define GL_SGI_color_matrix 1
#define EXTENSION_GL_SGI_color_matrix(NAME, FUNC, CONST, END) \
	NAME(GL_SGI_color_matrix) \
	CONST(int, GL_COLOR_MATRIX_SGI, 0x80B1) \
	CONST(int, GL_COLOR_MATRIX_STACK_DEPTH_SGI, 0x80B2) \
	CONST(int, GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI, 0x80B3) \
	CONST(int, GL_POST_COLOR_MATRIX_RED_SCALE_SGI, 0x80B4) \
	CONST(int, GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI, 0x80B5) \
	CONST(int, GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI, 0x80B6) \
	CONST(int, GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI, 0x80B7) \
	CONST(int, GL_POST_COLOR_MATRIX_RED_BIAS_SGI, 0x80B8) \
	CONST(int, GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI, 0x80B9) \
	CONST(int, GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI, 0x80BA) \
	CONST(int, GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI, 0x80BB) \
	END()
#else
#define EXTENSION_GL_SGI_color_matrix(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SGI_color_table
#define GL_SGI_color_table 1
#define EXTENSION_GL_SGI_color_table(NAME, FUNC, CONST, END) \
	NAME(GL_SGI_color_table) \
	CONST(int, GL_COLOR_TABLE_SGI, 0x80D0) \
	CONST(int, GL_POST_CONVOLUTION_COLOR_TABLE_SGI, 0x80D1) \
	CONST(int, GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI, 0x80D2) \
	CONST(int, GL_PROXY_COLOR_TABLE_SGI, 0x80D3) \
	CONST(int, GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI, 0x80D4) \
	CONST(int, GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI, 0x80D5) \
	CONST(int, GL_COLOR_TABLE_SCALE_SGI, 0x80D6) \
	CONST(int, GL_COLOR_TABLE_BIAS_SGI, 0x80D7) \
	CONST(int, GL_COLOR_TABLE_FORMAT_SGI, 0x80D8) \
	CONST(int, GL_COLOR_TABLE_WIDTH_SGI, 0x80D9) \
	CONST(int, GL_COLOR_TABLE_RED_SIZE_SGI, 0x80DA) \
	CONST(int, GL_COLOR_TABLE_GREEN_SIZE_SGI, 0x80DB) \
	CONST(int, GL_COLOR_TABLE_BLUE_SIZE_SGI, 0x80DC) \
	CONST(int, GL_COLOR_TABLE_ALPHA_SIZE_SGI, 0x80DD) \
	CONST(int, GL_COLOR_TABLE_LUMINANCE_SIZE_SGI, 0x80DE) \
	CONST(int, GL_COLOR_TABLE_INTENSITY_SIZE_SGI, 0x80DF) \
	FUNC(void , glColorTableSGI, GLCOLORTABLESGI, (GLenum target , GLenum internalformat , GLsizei width , GLenum format , GLenum type , const GLvoid * table ), (target, internalformat, width, format, type, table)) \
	FUNC(void , glColorTableParameterfvSGI, GLCOLORTABLEPARAMETERFVSGI, (GLenum target , GLenum pname , const GLfloat * params ), (target, pname, params)) \
	FUNC(void , glColorTableParameterivSGI, GLCOLORTABLEPARAMETERIVSGI, (GLenum target , GLenum pname , const GLint * params ), (target, pname, params)) \
	FUNC(void , glCopyColorTableSGI, GLCOPYCOLORTABLESGI, (GLenum target , GLenum internalformat , GLint x , GLint y , GLsizei width ), (target, internalformat, x, y, width)) \
	FUNC(void , glGetColorTableSGI, GLGETCOLORTABLESGI, (GLenum target , GLenum format , GLenum type , GLvoid * table ), (target, format, type, table)) \
	FUNC(void , glGetColorTableParameterfvSGI, GLGETCOLORTABLEPARAMETERFVSGI, (GLenum target , GLenum pname , GLfloat * params ), (target, pname, params)) \
	FUNC(void , glGetColorTableParameterivSGI, GLGETCOLORTABLEPARAMETERIVSGI, (GLenum target , GLenum pname , GLint * params ), (target, pname, params)) \
	END()
#else
#define EXTENSION_GL_SGI_color_table(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SGI_depth_pass_instrument
#define GL_SGI_depth_pass_instrument 1
#define EXTENSION_GL_SGI_depth_pass_instrument(NAME, FUNC, CONST, END) \
	NAME(GL_SGI_depth_pass_instrument) \
	CONST(int, GL_DEPTH_PASS_INSTRUMENT_SGIX, 0x8310) \
	CONST(int, GL_DEPTH_PASS_INSTRUMENT_COUNTERS_SGIX, 0x8311) \
	CONST(int, GL_DEPTH_PASS_INSTRUMENT_MAX_SGIX, 0x8312) \
	END()
#else
#define EXTENSION_GL_SGI_depth_pass_instrument(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SGI_texture_color_table
#define GL_SGI_texture_color_table 1
#define EXTENSION_GL_SGI_texture_color_table(NAME, FUNC, CONST, END) \
	NAME(GL_SGI_texture_color_table) \
	CONST(int, GL_TEXTURE_COLOR_TABLE_SGI, 0x80BC) \
	CONST(int, GL_PROXY_TEXTURE_COLOR_TABLE_SGI, 0x80BD) \
	END()
#else
#define EXTENSION_GL_SGI_texture_color_table(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SUNX_constant_data
#define GL_SUNX_constant_data 1
#define EXTENSION_GL_SUNX_constant_data(NAME, FUNC, CONST, END) \
	NAME(GL_SUNX_constant_data) \
	CONST(int, GL_UNPACK_CONSTANT_DATA_SUNX, 0x81D5) \
	CONST(int, GL_TEXTURE_CONSTANT_DATA_SUNX, 0x81D6) \
	FUNC(void , glFinishTextureSUNX, GLFINISHTEXTURESUNX, (void ), ()) \
	END()
#else
#define EXTENSION_GL_SUNX_constant_data(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SUN_convolution_border_modes
#define GL_SUN_convolution_border_modes 1
#define EXTENSION_GL_SUN_convolution_border_modes(NAME, FUNC, CONST, END) \
	NAME(GL_SUN_convolution_border_modes) \
	CONST(int, GL_WRAP_BORDER_SUN, 0x81D4) \
	END()
#else
#define EXTENSION_GL_SUN_convolution_border_modes(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SUN_global_alpha
#define GL_SUN_global_alpha 1
#define EXTENSION_GL_SUN_global_alpha(NAME, FUNC, CONST, END) \
	NAME(GL_SUN_global_alpha) \
	CONST(int, GL_GLOBAL_ALPHA_SUN, 0x81D9) \
	CONST(int, GL_GLOBAL_ALPHA_FACTOR_SUN, 0x81DA) \
	FUNC(void , glGlobalAlphaFactorbSUN, GLGLOBALALPHAFACTORBSUN, (GLbyte factor ), (factor)) \
	FUNC(void , glGlobalAlphaFactorsSUN, GLGLOBALALPHAFACTORSSUN, (GLshort factor ), (factor)) \
	FUNC(void , glGlobalAlphaFactoriSUN, GLGLOBALALPHAFACTORISUN, (GLint factor ), (factor)) \
	FUNC(void , glGlobalAlphaFactorfSUN, GLGLOBALALPHAFACTORFSUN, (GLfloat factor ), (factor)) \
	FUNC(void , glGlobalAlphaFactordSUN, GLGLOBALALPHAFACTORDSUN, (GLdouble factor ), (factor)) \
	FUNC(void , glGlobalAlphaFactorubSUN, GLGLOBALALPHAFACTORUBSUN, (GLubyte factor ), (factor)) \
	FUNC(void , glGlobalAlphaFactorusSUN, GLGLOBALALPHAFACTORUSSUN, (GLushort factor ), (factor)) \
	FUNC(void , glGlobalAlphaFactoruiSUN, GLGLOBALALPHAFACTORUISUN, (GLuint factor ), (factor)) \
	END()
#else
#define EXTENSION_GL_SUN_global_alpha(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SUN_mesh_array
#define GL_SUN_mesh_array 1
#define EXTENSION_GL_SUN_mesh_array(NAME, FUNC, CONST, END) \
	NAME(GL_SUN_mesh_array) \
	CONST(int, GL_QUAD_MESH_SUN, 0x8614) \
	CONST(int, GL_TRIANGLE_MESH_SUN, 0x8615) \
	FUNC(void , glDrawMeshArraysSUN, GLDRAWMESHARRAYSSUN, (GLenum mode , GLint first , GLsizei count , GLsizei width ), (mode, first, count, width)) \
	END()
#else
#define EXTENSION_GL_SUN_mesh_array(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SUN_slice_accum
#define GL_SUN_slice_accum 1
#define EXTENSION_GL_SUN_slice_accum(NAME, FUNC, CONST, END) \
	NAME(GL_SUN_slice_accum) \
	CONST(int, GL_SLICE_ACCUM_SUN, 0x85CC) \
	END()
#else
#define EXTENSION_GL_SUN_slice_accum(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SUN_triangle_list
#define GL_SUN_triangle_list 1
#define EXTENSION_GL_SUN_triangle_list(NAME, FUNC, CONST, END) \
	NAME(GL_SUN_triangle_list) \
	CONST(int, GL_RESTART_SUN, 0x0001) \
	CONST(int, GL_REPLACE_MIDDLE_SUN, 0x0002) \
	CONST(int, GL_REPLACE_OLDEST_SUN, 0x0003) \
	CONST(int, GL_TRIANGLE_LIST_SUN, 0x81D7) \
	CONST(int, GL_REPLACEMENT_CODE_SUN, 0x81D8) \
	CONST(int, GL_REPLACEMENT_CODE_ARRAY_SUN, 0x85C0) \
	CONST(int, GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN, 0x85C1) \
	CONST(int, GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN, 0x85C2) \
	CONST(int, GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN, 0x85C3) \
	CONST(int, GL_R1UI_V3F_SUN, 0x85C4) \
	CONST(int, GL_R1UI_C4UB_V3F_SUN, 0x85C5) \
	CONST(int, GL_R1UI_C3F_V3F_SUN, 0x85C6) \
	CONST(int, GL_R1UI_N3F_V3F_SUN, 0x85C7) \
	CONST(int, GL_R1UI_C4F_N3F_V3F_SUN, 0x85C8) \
	CONST(int, GL_R1UI_T2F_V3F_SUN, 0x85C9) \
	CONST(int, GL_R1UI_T2F_N3F_V3F_SUN, 0x85CA) \
	CONST(int, GL_R1UI_T2F_C4F_N3F_V3F_SUN, 0x85CB) \
	FUNC(void , glReplacementCodeuiSUN, GLREPLACEMENTCODEUISUN, (GLuint code ), (code)) \
	FUNC(void , glReplacementCodeusSUN, GLREPLACEMENTCODEUSSUN, (GLushort code ), (code)) \
	FUNC(void , glReplacementCodeubSUN, GLREPLACEMENTCODEUBSUN, (GLubyte code ), (code)) \
	FUNC(void , glReplacementCodeuivSUN, GLREPLACEMENTCODEUIVSUN, (const GLuint * code ), (code)) \
	FUNC(void , glReplacementCodeusvSUN, GLREPLACEMENTCODEUSVSUN, (const GLushort * code ), (code)) \
	FUNC(void , glReplacementCodeubvSUN, GLREPLACEMENTCODEUBVSUN, (const GLubyte * code ), (code)) \
	FUNC(void , glReplacementCodePointerSUN, GLREPLACEMENTCODEPOINTERSUN, (GLenum type , GLsizei stride , const GLvoid * * pointer ), (type, stride, pointer)) \
	END()
#else
#define EXTENSION_GL_SUN_triangle_list(NAME, FUNC, CONST, END)
#endif

#ifndef GL_SUN_vertex
#define GL_SUN_vertex 1
#define EXTENSION_GL_SUN_vertex(NAME, FUNC, CONST, END) \
	NAME(GL_SUN_vertex) \
	FUNC(void , glColor4ubVertex2fSUN, GLCOLOR4UBVERTEX2FSUN, (GLubyte r , GLubyte g , GLubyte b , GLubyte a , GLfloat x , GLfloat y ), (r, g, b, a, x, y)) \
	FUNC(void , glColor4ubVertex2fvSUN, GLCOLOR4UBVERTEX2FVSUN, (const GLubyte * c , const GLfloat * v ), (c, v)) \
	FUNC(void , glColor4ubVertex3fSUN, GLCOLOR4UBVERTEX3FSUN, (GLubyte r , GLubyte g , GLubyte b , GLubyte a , GLfloat x , GLfloat y , GLfloat z ), (r, g, b, a, x, y, z)) \
	FUNC(void , glColor4ubVertex3fvSUN, GLCOLOR4UBVERTEX3FVSUN, (const GLubyte * c , const GLfloat * v ), (c, v)) \
	FUNC(void , glColor3fVertex3fSUN, GLCOLOR3FVERTEX3FSUN, (GLfloat r , GLfloat g , GLfloat b , GLfloat x , GLfloat y , GLfloat z ), (r, g, b, x, y, z)) \
	FUNC(void , glColor3fVertex3fvSUN, GLCOLOR3FVERTEX3FVSUN, (const GLfloat * c , const GLfloat * v ), (c, v)) \
	FUNC(void , glNormal3fVertex3fSUN, GLNORMAL3FVERTEX3FSUN, (GLfloat nx , GLfloat ny , GLfloat nz , GLfloat x , GLfloat y , GLfloat z ), (nx, ny, nz, x, y, z)) \
	FUNC(void , glNormal3fVertex3fvSUN, GLNORMAL3FVERTEX3FVSUN, (const GLfloat * n , const GLfloat * v ), (n, v)) \
	FUNC(void , glColor4fNormal3fVertex3fSUN, GLCOLOR4FNORMAL3FVERTEX3FSUN, (GLfloat r , GLfloat g , GLfloat b , GLfloat a , GLfloat nx , GLfloat ny , GLfloat nz , GLfloat x , GLfloat y , GLfloat z ), (r, g, b, a, nx, ny, nz, x, y, z)) \
	FUNC(void , glColor4fNormal3fVertex3fvSUN, GLCOLOR4FNORMAL3FVERTEX3FVSUN, (const GLfloat * c , const GLfloat * n , const GLfloat * v ), (c, n, v)) \
	FUNC(void , glTexCoord2fVertex3fSUN, GLTEXCOORD2FVERTEX3FSUN, (GLfloat s , GLfloat t , GLfloat x , GLfloat y , GLfloat z ), (s, t, x, y, z)) \
	FUNC(void , glTexCoord2fVertex3fvSUN, GLTEXCOORD2FVERTEX3FVSUN, (const GLfloat * tc , const GLfloat * v ), (tc, v)) \
	FUNC(void , glTexCoord4fVertex4fSUN, GLTEXCOORD4FVERTEX4FSUN, (GLfloat s , GLfloat t , GLfloat p , GLfloat q , GLfloat x , GLfloat y , GLfloat z , GLfloat w ), (s, t, p, q, x, y, z, w)) \
	FUNC(void , glTexCoord4fVertex4fvSUN, GLTEXCOORD4FVERTEX4FVSUN, (const GLfloat * tc , const GLfloat * v ), (tc, v)) \
	FUNC(void , glTexCoord2fColor4ubVertex3fSUN, GLTEXCOORD2FCOLOR4UBVERTEX3FSUN, (GLfloat s , GLfloat t , GLubyte r , GLubyte g , GLubyte b , GLubyte a , GLfloat x , GLfloat y , GLfloat z ), (s, t, r, g, b, a, x, y, z)) \
	FUNC(void , glTexCoord2fColor4ubVertex3fvSUN, GLTEXCOORD2FCOLOR4UBVERTEX3FVSUN, (const GLfloat * tc , const GLubyte * c , const GLfloat * v ), (tc, c, v)) \
	FUNC(void , glTexCoord2fColor3fVertex3fSUN, GLTEXCOORD2FCOLOR3FVERTEX3FSUN, (GLfloat s , GLfloat t , GLfloat r , GLfloat g , GLfloat b , GLfloat x , GLfloat y , GLfloat z ), (s, t, r, g, b, x, y, z)) \
	FUNC(void , glTexCoord2fColor3fVertex3fvSUN, GLTEXCOORD2FCOLOR3FVERTEX3FVSUN, (const GLfloat * tc , const GLfloat * c , const GLfloat * v ), (tc, c, v)) \
	FUNC(void , glTexCoord2fNormal3fVertex3fSUN, GLTEXCOORD2FNORMAL3FVERTEX3FSUN, (GLfloat s , GLfloat t , GLfloat nx , GLfloat ny , GLfloat nz , GLfloat x , GLfloat y , GLfloat z ), (s, t, nx, ny, nz, x, y, z)) \
	FUNC(void , glTexCoord2fNormal3fVertex3fvSUN, GLTEXCOORD2FNORMAL3FVERTEX3FVSUN, (const GLfloat * tc , const GLfloat * n , const GLfloat * v ), (tc, n, v)) \
	FUNC(void , glTexCoord2fColor4fNormal3fVertex3fSUN, GLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUN, (GLfloat s , GLfloat t , GLfloat r , GLfloat g , GLfloat b , GLfloat a , GLfloat nx , GLfloat ny , GLfloat nz , GLfloat x , GLfloat y , GLfloat z ), (s, t, r, g, b, a, nx, ny, nz, x, y, z)) \
	FUNC(void , glTexCoord2fColor4fNormal3fVertex3fvSUN, GLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUN, (const GLfloat * tc , const GLfloat * c , const GLfloat * n , const GLfloat * v ), (tc, c, n, v)) \
	FUNC(void , glTexCoord4fColor4fNormal3fVertex4fSUN, GLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUN, (GLfloat s , GLfloat t , GLfloat p , GLfloat q , GLfloat r , GLfloat g , GLfloat b , GLfloat a , GLfloat nx , GLfloat ny , GLfloat nz , GLfloat x , GLfloat y , GLfloat z , GLfloat w ), (s, t, p, q, r, g, b, a, nx, ny, nz, x, y, z, w)) \
	FUNC(void , glTexCoord4fColor4fNormal3fVertex4fvSUN, GLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUN, (const GLfloat * tc , const GLfloat * c , const GLfloat * n , const GLfloat * v ), (tc, c, n, v)) \
	FUNC(void , glReplacementCodeuiVertex3fSUN, GLREPLACEMENTCODEUIVERTEX3FSUN, (GLuint rc , GLfloat x , GLfloat y , GLfloat z ), (rc, x, y, z)) \
	FUNC(void , glReplacementCodeuiVertex3fvSUN, GLREPLACEMENTCODEUIVERTEX3FVSUN, (const GLuint * rc , const GLfloat * v ), (rc, v)) \
	FUNC(void , glReplacementCodeuiColor4ubVertex3fSUN, GLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUN, (GLuint rc , GLubyte r , GLubyte g , GLubyte b , GLubyte a , GLfloat x , GLfloat y , GLfloat z ), (rc, r, g, b, a, x, y, z)) \
	FUNC(void , glReplacementCodeuiColor4ubVertex3fvSUN, GLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUN, (const GLuint * rc , const GLubyte * c , const GLfloat * v ), (rc, c, v)) \
	FUNC(void , glReplacementCodeuiColor3fVertex3fSUN, GLREPLACEMENTCODEUICOLOR3FVERTEX3FSUN, (GLuint rc , GLfloat r , GLfloat g , GLfloat b , GLfloat x , GLfloat y , GLfloat z ), (rc, r, g, b, x, y, z)) \
	FUNC(void , glReplacementCodeuiColor3fVertex3fvSUN, GLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUN, (const GLuint * rc , const GLfloat * c , const GLfloat * v ), (rc, c, v)) \
	FUNC(void , glReplacementCodeuiNormal3fVertex3fSUN, GLREPLACEMENTCODEUINORMAL3FVERTEX3FSUN, (GLuint rc , GLfloat nx , GLfloat ny , GLfloat nz , GLfloat x , GLfloat y , GLfloat z ), (rc, nx, ny, nz, x, y, z)) \
	FUNC(void , glReplacementCodeuiNormal3fVertex3fvSUN, GLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUN, (const GLuint * rc , const GLfloat * n , const GLfloat * v ), (rc, n, v)) \
	FUNC(void , glReplacementCodeuiColor4fNormal3fVertex3fSUN, GLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUN, (GLuint rc , GLfloat r , GLfloat g , GLfloat b , GLfloat a , GLfloat nx , GLfloat ny , GLfloat nz , GLfloat x , GLfloat y , GLfloat z ), (rc, r, g, b, a, nx, ny, nz, x, y, z)) \
	FUNC(void , glReplacementCodeuiColor4fNormal3fVertex3fvSUN, GLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUN, (const GLuint * rc , const GLfloat * c , const GLfloat * n , const GLfloat * v ), (rc, c, n, v)) \
	FUNC(void , glReplacementCodeuiTexCoord2fVertex3fSUN, GLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUN, (GLuint rc , GLfloat s , GLfloat t , GLfloat x , GLfloat y , GLfloat z ), (rc, s, t, x, y, z)) \
	FUNC(void , glReplacementCodeuiTexCoord2fVertex3fvSUN, GLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUN, (const GLuint * rc , const GLfloat * tc , const GLfloat * v ), (rc, tc, v)) \
	FUNC(void , glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN, GLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUN, (GLuint rc , GLfloat s , GLfloat t , GLfloat nx , GLfloat ny , GLfloat nz , GLfloat x , GLfloat y , GLfloat z ), (rc, s, t, nx, ny, nz, x, y, z)) \
	FUNC(void , glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN, GLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUN, (const GLuint * rc , const GLfloat * tc , const GLfloat * n , const GLfloat * v ), (rc, tc, n, v)) \
	FUNC(void , glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN, GLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUN, (GLuint rc , GLfloat s , GLfloat t , GLfloat r , GLfloat g , GLfloat b , GLfloat a , GLfloat nx , GLfloat ny , GLfloat nz , GLfloat x , GLfloat y , GLfloat z ), (rc, s, t, r, g, b, a, nx, ny, nz, x, y, z)) \
	FUNC(void , glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN, GLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUN, (const GLuint * rc , const GLfloat * tc , const GLfloat * c , const GLfloat * n , const GLfloat * v ), (rc, tc, c, n, v)) \
	END()
#else
#define EXTENSION_GL_SUN_vertex(NAME, FUNC, CONST, END)
#endif

#ifndef GL_VERSION_1_2
#define GL_VERSION_1_2 1
#define EXTENSION_GL_VERSION_1_2(NAME, FUNC, CONST, END) \
	NAME(GL_VERSION_1_2) \
	CONST(int, GL_UNSIGNED_BYTE_3_3_2, 0x8032) \
	CONST(int, GL_UNSIGNED_SHORT_4_4_4_4, 0x8033) \
	CONST(int, GL_UNSIGNED_SHORT_5_5_5_1, 0x8034) \
	CONST(int, GL_UNSIGNED_INT_8_8_8_8, 0x8035) \
	CONST(int, GL_UNSIGNED_INT_10_10_10_2, 0x8036) \
	CONST(int, GL_TEXTURE_BINDING_3D, 0x806A) \
	CONST(int, GL_PACK_SKIP_IMAGES, 0x806B) \
	CONST(int, GL_PACK_IMAGE_HEIGHT, 0x806C) \
	CONST(int, GL_UNPACK_SKIP_IMAGES, 0x806D) \
	CONST(int, GL_UNPACK_IMAGE_HEIGHT, 0x806E) \
	CONST(int, GL_TEXTURE_3D, 0x806F) \
	CONST(int, GL_PROXY_TEXTURE_3D, 0x8070) \
	CONST(int, GL_TEXTURE_DEPTH, 0x8071) \
	CONST(int, GL_TEXTURE_WRAP_R, 0x8072) \
	CONST(int, GL_MAX_3D_TEXTURE_SIZE, 0x8073) \
	CONST(int, GL_UNSIGNED_BYTE_2_3_3_REV, 0x8362) \
	CONST(int, GL_UNSIGNED_SHORT_5_6_5, 0x8363) \
	CONST(int, GL_UNSIGNED_SHORT_5_6_5_REV, 0x8364) \
	CONST(int, GL_UNSIGNED_SHORT_4_4_4_4_REV, 0x8365) \
	CONST(int, GL_UNSIGNED_SHORT_1_5_5_5_REV, 0x8366) \
	CONST(int, GL_UNSIGNED_INT_8_8_8_8_REV, 0x8367) \
	CONST(int, GL_UNSIGNED_INT_2_10_10_10_REV, 0x8368) \
	CONST(int, GL_BGR, 0x80E0) \
	CONST(int, GL_BGRA, 0x80E1) \
	CONST(int, GL_MAX_ELEMENTS_VERTICES, 0x80E8) \
	CONST(int, GL_MAX_ELEMENTS_INDICES, 0x80E9) \
	CONST(int, GL_CLAMP_TO_EDGE, 0x812F) \
	CONST(int, GL_TEXTURE_MIN_LOD, 0x813A) \
	CONST(int, GL_TEXTURE_MAX_LOD, 0x813B) \
	CONST(int, GL_TEXTURE_BASE_LEVEL, 0x813C) \
	CONST(int, GL_TEXTURE_MAX_LEVEL, 0x813D) \
	CONST(int, GL_SMOOTH_POINT_SIZE_RANGE, 0x0B12) \
	CONST(int, GL_SMOOTH_POINT_SIZE_GRANULARITY, 0x0B13) \
	CONST(int, GL_SMOOTH_LINE_WIDTH_RANGE, 0x0B22) \
	CONST(int, GL_SMOOTH_LINE_WIDTH_GRANULARITY, 0x0B23) \
	CONST(int, GL_ALIASED_LINE_WIDTH_RANGE, 0x846E) \
	FUNC(void , glBlendColor, GLBLENDCOLOR, (GLclampf red , GLclampf green , GLclampf blue , GLclampf alpha ), (red, green, blue, alpha)) \
	FUNC(void , glBlendEquation, GLBLENDEQUATION, (GLenum mode ), (mode)) \
	FUNC(void , glDrawRangeElements, GLDRAWRANGEELEMENTS, (GLenum mode , GLuint start , GLuint end , GLsizei count , GLenum type , const GLvoid * indices ), (mode, start, end, count, type, indices)) \
	FUNC(void , glTexImage3D, GLTEXIMAGE3D, (GLenum target , GLint level , GLint internalformat , GLsizei width , GLsizei height , GLsizei depth , GLint border , GLenum format , GLenum type , const GLvoid * pixels ), (target, level, internalformat, width, height, depth, border, format, type, pixels)) \
	FUNC(void , glTexSubImage3D, GLTEXSUBIMAGE3D, (GLenum target , GLint level , GLint xoffset , GLint yoffset , GLint zoffset , GLsizei width , GLsizei height , GLsizei depth , GLenum format , GLenum type , const GLvoid * pixels ), (target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels)) \
	FUNC(void , glCopyTexSubImage3D, GLCOPYTEXSUBIMAGE3D, (GLenum target , GLint level , GLint xoffset , GLint yoffset , GLint zoffset , GLint x , GLint y , GLsizei width , GLsizei height ), (target, level, xoffset, yoffset, zoffset, x, y, width, height)) \
	END()
#else
#define EXTENSION_GL_VERSION_1_2(NAME, FUNC, CONST, END)
#endif

#ifndef GL_VERSION_1_2_DEPRECATED
#define GL_VERSION_1_2_DEPRECATED 1
#define EXTENSION_GL_VERSION_1_2_DEPRECATED(NAME, FUNC, CONST, END) \
	NAME(GL_VERSION_1_2_DEPRECATED) \
	CONST(int, GL_RESCALE_NORMAL, 0x803A) \
	CONST(int, GL_LIGHT_MODEL_COLOR_CONTROL, 0x81F8) \
	CONST(int, GL_SINGLE_COLOR, 0x81F9) \
	CONST(int, GL_SEPARATE_SPECULAR_COLOR, 0x81FA) \
	CONST(int, GL_ALIASED_POINT_SIZE_RANGE, 0x846D) \
	FUNC(void , glColorTable, GLCOLORTABLE, (GLenum target , GLenum internalformat , GLsizei width , GLenum format , GLenum type , const GLvoid * table ), (target, internalformat, width, format, type, table)) \
	FUNC(void , glColorTableParameterfv, GLCOLORTABLEPARAMETERFV, (GLenum target , GLenum pname , const GLfloat * params ), (target, pname, params)) \
	FUNC(void , glColorTableParameteriv, GLCOLORTABLEPARAMETERIV, (GLenum target , GLenum pname , const GLint * params ), (target, pname, params)) \
	FUNC(void , glCopyColorTable, GLCOPYCOLORTABLE, (GLenum target , GLenum internalformat , GLint x , GLint y , GLsizei width ), (target, internalformat, x, y, width)) \
	FUNC(void , glGetColorTable, GLGETCOLORTABLE, (GLenum target , GLenum format , GLenum type , GLvoid * table ), (target, format, type, table)) \
	FUNC(void , glGetColorTableParameterfv, GLGETCOLORTABLEPARAMETERFV, (GLenum target , GLenum pname , GLfloat * params ), (target, pname, params)) \
	FUNC(void , glGetColorTableParameteriv, GLGETCOLORTABLEPARAMETERIV, (GLenum target , GLenum pname , GLint * params ), (target, pname, params)) \
	FUNC(void , glColorSubTable, GLCOLORSUBTABLE, (GLenum target , GLsizei start , GLsizei count , GLenum format , GLenum type , const GLvoid * data ), (target, start, count, format, type, data)) \
	FUNC(void , glCopyColorSubTable, GLCOPYCOLORSUBTABLE, (GLenum target , GLsizei start , GLint x , GLint y , GLsizei width ), (target, start, x, y, width)) \
	FUNC(void , glConvolutionFilter1D, GLCONVOLUTIONFILTER1D, (GLenum target , GLenum internalformat , GLsizei width , GLenum format , GLenum type , const GLvoid * image ), (target, internalformat, width, format, type, image)) \
	FUNC(void , glConvolutionFilter2D, GLCONVOLUTIONFILTER2D, (GLenum target , GLenum internalformat , GLsizei width , GLsizei height , GLenum format , GLenum type , const GLvoid * image ), (target, internalformat, width, height, format, type, image)) \
	FUNC(void , glConvolutionParameterf, GLCONVOLUTIONPARAMETERF, (GLenum target , GLenum pname , GLfloat params ), (target, pname, params)) \
	FUNC(void , glConvolutionParameterfv, GLCONVOLUTIONPARAMETERFV, (GLenum target , GLenum pname , const GLfloat * params ), (target, pname, params)) \
	FUNC(void , glConvolutionParameteri, GLCONVOLUTIONPARAMETERI, (GLenum target , GLenum pname , GLint params ), (target, pname, params)) \
	FUNC(void , glConvolutionParameteriv, GLCONVOLUTIONPARAMETERIV, (GLenum target , GLenum pname , const GLint * params ), (target, pname, params)) \
	FUNC(void , glCopyConvolutionFilter1D, GLCOPYCONVOLUTIONFILTER1D, (GLenum target , GLenum internalformat , GLint x , GLint y , GLsizei width ), (target, internalformat, x, y, width)) \
	FUNC(void , glCopyConvolutionFilter2D, GLCOPYCONVOLUTIONFILTER2D, (GLenum target , GLenum internalformat , GLint x , GLint y , GLsizei width , GLsizei height ), (target, internalformat, x, y, width, height)) \
	FUNC(void , glGetConvolutionFilter, GLGETCONVOLUTIONFILTER, (GLenum target , GLenum format , GLenum type , GLvoid * image ), (target, format, type, image)) \
	FUNC(void , glGetConvolutionParameterfv, GLGETCONVOLUTIONPARAMETERFV, (GLenum target , GLenum pname , GLfloat * params ), (target, pname, params)) \
	FUNC(void , glGetConvolutionParameteriv, GLGETCONVOLUTIONPARAMETERIV, (GLenum target , GLenum pname , GLint * params ), (target, pname, params)) \
	FUNC(void , glGetSeparableFilter, GLGETSEPARABLEFILTER, (GLenum target , GLenum format , GLenum type , GLvoid * row , GLvoid * column , GLvoid * span ), (target, format, type, row, column, span)) \
	FUNC(void , glSeparableFilter2D, GLSEPARABLEFILTER2D, (GLenum target , GLenum internalformat , GLsizei width , GLsizei height , GLenum format , GLenum type , const GLvoid * row , const GLvoid * column ), (target, internalformat, width, height, format, type, row, column)) \
	FUNC(void , glGetHistogram, GLGETHISTOGRAM, (GLenum target , GLboolean reset , GLenum format , GLenum type , GLvoid * values ), (target, reset, format, type, values)) \
	FUNC(void , glGetHistogramParameterfv, GLGETHISTOGRAMPARAMETERFV, (GLenum target , GLenum pname , GLfloat * params ), (target, pname, params)) \
	FUNC(void , glGetHistogramParameteriv, GLGETHISTOGRAMPARAMETERIV, (GLenum target , GLenum pname , GLint * params ), (target, pname, params)) \
	FUNC(void , glGetMinmax, GLGETMINMAX, (GLenum target , GLboolean reset , GLenum format , GLenum type , GLvoid * values ), (target, reset, format, type, values)) \
	FUNC(void , glGetMinmaxParameterfv, GLGETMINMAXPARAMETERFV, (GLenum target , GLenum pname , GLfloat * params ), (target, pname, params)) \
	FUNC(void , glGetMinmaxParameteriv, GLGETMINMAXPARAMETERIV, (GLenum target , GLenum pname , GLint * params ), (target, pname, params)) \
	FUNC(void , glHistogram, GLHISTOGRAM, (GLenum target , GLsizei width , GLenum internalformat , GLboolean sink ), (target, width, internalformat, sink)) \
	FUNC(void , glMinmax, GLMINMAX, (GLenum target , GLenum internalformat , GLboolean sink ), (target, internalformat, sink)) \
	FUNC(void , glResetHistogram, GLRESETHISTOGRAM, (GLenum target ), (target)) \
	FUNC(void , glResetMinmax, GLRESETMINMAX, (GLenum target ), (target)) \
	END()
#else
#define EXTENSION_GL_VERSION_1_2_DEPRECATED(NAME, FUNC, CONST, END)
#endif

#ifndef GL_VERSION_1_3
#define GL_VERSION_1_3 1
#define EXTENSION_GL_VERSION_1_3(NAME, FUNC, CONST, END) \
	NAME(GL_VERSION_1_3) \
	CONST(int, GL_TEXTURE0, 0x84C0) \
	CONST(int, GL_TEXTURE1, 0x84C1) \
	CONST(int, GL_TEXTURE2, 0x84C2) \
	CONST(int, GL_TEXTURE3, 0x84C3) \
	CONST(int, GL_TEXTURE4, 0x84C4) \
	CONST(int, GL_TEXTURE5, 0x84C5) \
	CONST(int, GL_TEXTURE6, 0x84C6) \
	CONST(int, GL_TEXTURE7, 0x84C7) \
	CONST(int, GL_TEXTURE8, 0x84C8) \
	CONST(int, GL_TEXTURE9, 0x84C9) \
	CONST(int, GL_TEXTURE10, 0x84CA) \
	CONST(int, GL_TEXTURE11, 0x84CB) \
	CONST(int, GL_TEXTURE12, 0x84CC) \
	CONST(int, GL_TEXTURE13, 0x84CD) \
	CONST(int, GL_TEXTURE14, 0x84CE) \
	CONST(int, GL_TEXTURE15, 0x84CF) \
	CONST(int, GL_TEXTURE16, 0x84D0) \
	CONST(int, GL_TEXTURE17, 0x84D1) \
	CONST(int, GL_TEXTURE18, 0x84D2) \
	CONST(int, GL_TEXTURE19, 0x84D3) \
	CONST(int, GL_TEXTURE20, 0x84D4) \
	CONST(int, GL_TEXTURE21, 0x84D5) \
	CONST(int, GL_TEXTURE22, 0x84D6) \
	CONST(int, GL_TEXTURE23, 0x84D7) \
	CONST(int, GL_TEXTURE24, 0x84D8) \
	CONST(int, GL_TEXTURE25, 0x84D9) \
	CONST(int, GL_TEXTURE26, 0x84DA) \
	CONST(int, GL_TEXTURE27, 0x84DB) \
	CONST(int, GL_TEXTURE28, 0x84DC) \
	CONST(int, GL_TEXTURE29, 0x84DD) \
	CONST(int, GL_TEXTURE30, 0x84DE) \
	CONST(int, GL_TEXTURE31, 0x84DF) \
	CONST(int, GL_ACTIVE_TEXTURE, 0x84E0) \
	CONST(int, GL_MULTISAMPLE, 0x809D) \
	CONST(int, GL_SAMPLE_ALPHA_TO_COVERAGE, 0x809E) \
	CONST(int, GL_SAMPLE_ALPHA_TO_ONE, 0x809F) \
	CONST(int, GL_SAMPLE_COVERAGE, 0x80A0) \
	CONST(int, GL_SAMPLE_BUFFERS, 0x80A8) \
	CONST(int, GL_SAMPLES, 0x80A9) \
	CONST(int, GL_SAMPLE_COVERAGE_VALUE, 0x80AA) \
	CONST(int, GL_SAMPLE_COVERAGE_INVERT, 0x80AB) \
	CONST(int, GL_TEXTURE_CUBE_MAP, 0x8513) \
	CONST(int, GL_TEXTURE_BINDING_CUBE_MAP, 0x8514) \
	CONST(int, GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0x8515) \
	CONST(int, GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0x8516) \
	CONST(int, GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0x8517) \
	CONST(int, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0x8518) \
	CONST(int, GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0x8519) \
	CONST(int, GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0x851A) \
	CONST(int, GL_PROXY_TEXTURE_CUBE_MAP, 0x851B) \
	CONST(int, GL_MAX_CUBE_MAP_TEXTURE_SIZE, 0x851C) \
	CONST(int, GL_COMPRESSED_RGB, 0x84ED) \
	CONST(int, GL_COMPRESSED_RGBA, 0x84EE) \
	CONST(int, GL_TEXTURE_COMPRESSION_HINT, 0x84EF) \
	CONST(int, GL_TEXTURE_COMPRESSED_IMAGE_SIZE, 0x86A0) \
	CONST(int, GL_TEXTURE_COMPRESSED, 0x86A1) \
	CONST(int, GL_NUM_COMPRESSED_TEXTURE_FORMATS, 0x86A2) \
	CONST(int, GL_COMPRESSED_TEXTURE_FORMATS, 0x86A3) \
	CONST(int, GL_CLAMP_TO_BORDER, 0x812D) \
	FUNC(void , glActiveTexture, GLACTIVETEXTURE, (GLenum texture ), (texture)) \
	FUNC(void , glSampleCoverage, GLSAMPLECOVERAGE, (GLclampf value , GLboolean invert ), (value, invert)) \
	FUNC(void , glCompressedTexImage3D, GLCOMPRESSEDTEXIMAGE3D, (GLenum target , GLint level , GLenum internalformat , GLsizei width , GLsizei height , GLsizei depth , GLint border , GLsizei imageSize , const GLvoid * data ), (target, level, internalformat, width, height, depth, border, imageSize, data)) \
	FUNC(void , glCompressedTexImage2D, GLCOMPRESSEDTEXIMAGE2D, (GLenum target , GLint level , GLenum internalformat , GLsizei width , GLsizei height , GLint border , GLsizei imageSize , const GLvoid * data ), (target, level, internalformat, width, height, border, imageSize, data)) \
	FUNC(void , glCompressedTexImage1D, GLCOMPRESSEDTEXIMAGE1D, (GLenum target , GLint level , GLenum internalformat , GLsizei width , GLint border , GLsizei imageSize , const GLvoid * data ), (target, level, internalformat, width, border, imageSize, data)) \
	FUNC(void , glCompressedTexSubImage3D, GLCOMPRESSEDTEXSUBIMAGE3D, (GLenum target , GLint level , GLint xoffset , GLint yoffset , GLint zoffset , GLsizei width , GLsizei height , GLsizei depth , GLenum format , GLsizei imageSize , const GLvoid * data ), (target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data)) \
	FUNC(void , glCompressedTexSubImage2D, GLCOMPRESSEDTEXSUBIMAGE2D, (GLenum target , GLint level , GLint xoffset , GLint yoffset , GLsizei width , GLsizei height , GLenum format , GLsizei imageSize , const GLvoid * data ), (target, level, xoffset, yoffset, width, height, format, imageSize, data)) \
	FUNC(void , glCompressedTexSubImage1D, GLCOMPRESSEDTEXSUBIMAGE1D, (GLenum target , GLint level , GLint xoffset , GLsizei width , GLenum format , GLsizei imageSize , const GLvoid * data ), (target, level, xoffset, width, format, imageSize, data)) \
	FUNC(void , glGetCompressedTexImage, GLGETCOMPRESSEDTEXIMAGE, (GLenum target , GLint level , GLvoid * img ), (target, level, img)) \
	END()
#else
#define EXTENSION_GL_VERSION_1_3(NAME, FUNC, CONST, END)
#endif

#ifndef GL_VERSION_1_3_DEPRECATED
#define GL_VERSION_1_3_DEPRECATED 1
#define EXTENSION_GL_VERSION_1_3_DEPRECATED(NAME, FUNC, CONST, END) \
	NAME(GL_VERSION_1_3_DEPRECATED) \
	CONST(int, GL_CLIENT_ACTIVE_TEXTURE, 0x84E1) \
	CONST(int, GL_MAX_TEXTURE_UNITS, 0x84E2) \
	CONST(int, GL_TRANSPOSE_MODELVIEW_MATRIX, 0x84E3) \
	CONST(int, GL_TRANSPOSE_PROJECTION_MATRIX, 0x84E4) \
	CONST(int, GL_TRANSPOSE_TEXTURE_MATRIX, 0x84E5) \
	CONST(int, GL_TRANSPOSE_COLOR_MATRIX, 0x84E6) \
	CONST(int, GL_MULTISAMPLE_BIT, 0x20000000) \
	CONST(int, GL_NORMAL_MAP, 0x8511) \
	CONST(int, GL_REFLECTION_MAP, 0x8512) \
	CONST(int, GL_COMPRESSED_ALPHA, 0x84E9) \
	CONST(int, GL_COMPRESSED_LUMINANCE, 0x84EA) \
	CONST(int, GL_COMPRESSED_LUMINANCE_ALPHA, 0x84EB) \
	CONST(int, GL_COMPRESSED_INTENSITY, 0x84EC) \
	CONST(int, GL_COMBINE, 0x8570) \
	CONST(int, GL_COMBINE_RGB, 0x8571) \
	CONST(int, GL_COMBINE_ALPHA, 0x8572) \
	CONST(int, GL_SOURCE0_RGB, 0x8580) \
	CONST(int, GL_SOURCE1_RGB, 0x8581) \
	CONST(int, GL_SOURCE2_RGB, 0x8582) \
	CONST(int, GL_SOURCE0_ALPHA, 0x8588) \
	CONST(int, GL_SOURCE1_ALPHA, 0x8589) \
	CONST(int, GL_SOURCE2_ALPHA, 0x858A) \
	CONST(int, GL_OPERAND0_RGB, 0x8590) \
	CONST(int, GL_OPERAND1_RGB, 0x8591) \
	CONST(int, GL_OPERAND2_RGB, 0x8592) \
	CONST(int, GL_OPERAND0_ALPHA, 0x8598) \
	CONST(int, GL_OPERAND1_ALPHA, 0x8599) \
	CONST(int, GL_OPERAND2_ALPHA, 0x859A) \
	CONST(int, GL_RGB_SCALE, 0x8573) \
	CONST(int, GL_ADD_SIGNED, 0x8574) \
	CONST(int, GL_INTERPOLATE, 0x8575) \
	CONST(int, GL_SUBTRACT, 0x84E7) \
	CONST(int, GL_CONSTANT, 0x8576) \
	CONST(int, GL_PRIMARY_COLOR, 0x8577) \
	CONST(int, GL_PREVIOUS, 0x8578) \
	CONST(int, GL_DOT3_RGB, 0x86AE) \
	CONST(int, GL_DOT3_RGBA, 0x86AF) \
	FUNC(void , glClientActiveTexture, GLCLIENTACTIVETEXTURE, (GLenum texture ), (texture)) \
	FUNC(void , glMultiTexCoord1d, GLMULTITEXCOORD1D, (GLenum target , GLdouble s ), (target, s)) \
	FUNC(void , glMultiTexCoord1dv, GLMULTITEXCOORD1DV, (GLenum target , const GLdouble * v ), (target, v)) \
	FUNC(void , glMultiTexCoord1f, GLMULTITEXCOORD1F, (GLenum target , GLfloat s ), (target, s)) \
	FUNC(void , glMultiTexCoord1fv, GLMULTITEXCOORD1FV, (GLenum target , const GLfloat * v ), (target, v)) \
	FUNC(void , glMultiTexCoord1i, GLMULTITEXCOORD1I, (GLenum target , GLint s ), (target, s)) \
	FUNC(void , glMultiTexCoord1iv, GLMULTITEXCOORD1IV, (GLenum target , const GLint * v ), (target, v)) \
	FUNC(void , glMultiTexCoord1s, GLMULTITEXCOORD1S, (GLenum target , GLshort s ), (target, s)) \
	FUNC(void , glMultiTexCoord1sv, GLMULTITEXCOORD1SV, (GLenum target , const GLshort * v ), (target, v)) \
	FUNC(void , glMultiTexCoord2d, GLMULTITEXCOORD2D, (GLenum target , GLdouble s , GLdouble t ), (target, s, t)) \
	FUNC(void , glMultiTexCoord2dv, GLMULTITEXCOORD2DV, (GLenum target , const GLdouble * v ), (target, v)) \
	FUNC(void , glMultiTexCoord2f, GLMULTITEXCOORD2F, (GLenum target , GLfloat s , GLfloat t ), (target, s, t)) \
	FUNC(void , glMultiTexCoord2fv, GLMULTITEXCOORD2FV, (GLenum target , const GLfloat * v ), (target, v)) \
	FUNC(void , glMultiTexCoord2i, GLMULTITEXCOORD2I, (GLenum target , GLint s , GLint t ), (target, s, t)) \
	FUNC(void , glMultiTexCoord2iv, GLMULTITEXCOORD2IV, (GLenum target , const GLint * v ), (target, v)) \
	FUNC(void , glMultiTexCoord2s, GLMULTITEXCOORD2S, (GLenum target , GLshort s , GLshort t ), (target, s, t)) \
	FUNC(void , glMultiTexCoord2sv, GLMULTITEXCOORD2SV, (GLenum target , const GLshort * v ), (target, v)) \
	FUNC(void , glMultiTexCoord3d, GLMULTITEXCOORD3D, (GLenum target , GLdouble s , GLdouble t , GLdouble r ), (target, s, t, r)) \
	FUNC(void , glMultiTexCoord3dv, GLMULTITEXCOORD3DV, (GLenum target , const GLdouble * v ), (target, v)) \
	FUNC(void , glMultiTexCoord3f, GLMULTITEXCOORD3F, (GLenum target , GLfloat s , GLfloat t , GLfloat r ), (target, s, t, r)) \
	FUNC(void , glMultiTexCoord3fv, GLMULTITEXCOORD3FV, (GLenum target , const GLfloat * v ), (target, v)) \
	FUNC(void , glMultiTexCoord3i, GLMULTITEXCOORD3I, (GLenum target , GLint s , GLint t , GLint r ), (target, s, t, r)) \
	FUNC(void , glMultiTexCoord3iv, GLMULTITEXCOORD3IV, (GLenum target , const GLint * v ), (target, v)) \
	FUNC(void , glMultiTexCoord3s, GLMULTITEXCOORD3S, (GLenum target , GLshort s , GLshort t , GLshort r ), (target, s, t, r)) \
	FUNC(void , glMultiTexCoord3sv, GLMULTITEXCOORD3SV, (GLenum target , const GLshort * v ), (target, v)) \
	FUNC(void , glMultiTexCoord4d, GLMULTITEXCOORD4D, (GLenum target , GLdouble s , GLdouble t , GLdouble r , GLdouble q ), (target, s, t, r, q)) \
	FUNC(void , glMultiTexCoord4dv, GLMULTITEXCOORD4DV, (GLenum target , const GLdouble * v ), (target, v)) \
	FUNC(void , glMultiTexCoord4f, GLMULTITEXCOORD4F, (GLenum target , GLfloat s , GLfloat t , GLfloat r , GLfloat q ), (target, s, t, r, q)) \
	FUNC(void , glMultiTexCoord4fv, GLMULTITEXCOORD4FV, (GLenum target , const GLfloat * v ), (target, v)) \
	FUNC(void , glMultiTexCoord4i, GLMULTITEXCOORD4I, (GLenum target , GLint s , GLint t , GLint r , GLint q ), (target, s, t, r, q)) \
	FUNC(void , glMultiTexCoord4iv, GLMULTITEXCOORD4IV, (GLenum target , const GLint * v ), (target, v)) \
	FUNC(void , glMultiTexCoord4s, GLMULTITEXCOORD4S, (GLenum target , GLshort s , GLshort t , GLshort r , GLshort q ), (target, s, t, r, q)) \
	FUNC(void , glMultiTexCoord4sv, GLMULTITEXCOORD4SV, (GLenum target , const GLshort * v ), (target, v)) \
	FUNC(void , glLoadTransposeMatrixf, GLLOADTRANSPOSEMATRIXF, (const GLfloat * m ), (m)) \
	FUNC(void , glLoadTransposeMatrixd, GLLOADTRANSPOSEMATRIXD, (const GLdouble * m ), (m)) \
	FUNC(void , glMultTransposeMatrixf, GLMULTTRANSPOSEMATRIXF, (const GLfloat * m ), (m)) \
	FUNC(void , glMultTransposeMatrixd, GLMULTTRANSPOSEMATRIXD, (const GLdouble * m ), (m)) \
	END()
#else
#define EXTENSION_GL_VERSION_1_3_DEPRECATED(NAME, FUNC, CONST, END)
#endif

#ifndef GL_VERSION_1_4
#define GL_VERSION_1_4 1
#define EXTENSION_GL_VERSION_1_4(NAME, FUNC, CONST, END) \
	NAME(GL_VERSION_1_4) \
	CONST(int, GL_BLEND_DST_RGB, 0x80C8) \
	CONST(int, GL_BLEND_SRC_RGB, 0x80C9) \
	CONST(int, GL_BLEND_DST_ALPHA, 0x80CA) \
	CONST(int, GL_BLEND_SRC_ALPHA, 0x80CB) \
	CONST(int, GL_POINT_FADE_THRESHOLD_SIZE, 0x8128) \
	CONST(int, GL_DEPTH_COMPONENT16, 0x81A5) \
	CONST(int, GL_DEPTH_COMPONENT24, 0x81A6) \
	CONST(int, GL_DEPTH_COMPONENT32, 0x81A7) \
	CONST(int, GL_MIRRORED_REPEAT, 0x8370) \
	CONST(int, GL_MAX_TEXTURE_LOD_BIAS, 0x84FD) \
	CONST(int, GL_TEXTURE_LOD_BIAS, 0x8501) \
	CONST(int, GL_INCR_WRAP, 0x8507) \
	CONST(int, GL_DECR_WRAP, 0x8508) \
	CONST(int, GL_TEXTURE_DEPTH_SIZE, 0x884A) \
	CONST(int, GL_TEXTURE_COMPARE_MODE, 0x884C) \
	CONST(int, GL_TEXTURE_COMPARE_FUNC, 0x884D) \
	FUNC(void , glBlendFuncSeparate, GLBLENDFUNCSEPARATE, (GLenum sfactorRGB , GLenum dfactorRGB , GLenum sfactorAlpha , GLenum dfactorAlpha ), (sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha)) \
	FUNC(void , glMultiDrawArrays, GLMULTIDRAWARRAYS, (GLenum mode , const GLint * first , const GLsizei * count , GLsizei primcount ), (mode, first, count, primcount)) \
	FUNC(void , glMultiDrawElements, GLMULTIDRAWELEMENTS, (GLenum mode , const GLsizei * count , GLenum type , const GLvoid * * indices , GLsizei primcount ), (mode, count, type, indices, primcount)) \
	FUNC(void , glPointParameterf, GLPOINTPARAMETERF, (GLenum pname , GLfloat param ), (pname, param)) \
	FUNC(void , glPointParameterfv, GLPOINTPARAMETERFV, (GLenum pname , const GLfloat * params ), (pname, params)) \
	FUNC(void , glPointParameteri, GLPOINTPARAMETERI, (GLenum pname , GLint param ), (pname, param)) \
	FUNC(void , glPointParameteriv, GLPOINTPARAMETERIV, (GLenum pname , const GLint * params ), (pname, params)) \
	END()
#else
#define EXTENSION_GL_VERSION_1_4(NAME, FUNC, CONST, END)
#endif

#ifndef GL_VERSION_1_4_DEPRECATED
#define GL_VERSION_1_4_DEPRECATED 1
#define EXTENSION_GL_VERSION_1_4_DEPRECATED(NAME, FUNC, CONST, END) \
	NAME(GL_VERSION_1_4_DEPRECATED) \
	CONST(int, GL_POINT_SIZE_MIN, 0x8126) \
	CONST(int, GL_POINT_SIZE_MAX, 0x8127) \
	CONST(int, GL_POINT_DISTANCE_ATTENUATION, 0x8129) \
	CONST(int, GL_GENERATE_MIPMAP, 0x8191) \
	CONST(int, GL_GENERATE_MIPMAP_HINT, 0x8192) \
	CONST(int, GL_FOG_COORDINATE_SOURCE, 0x8450) \
	CONST(int, GL_FOG_COORDINATE, 0x8451) \
	CONST(int, GL_FRAGMENT_DEPTH, 0x8452) \
	CONST(int, GL_CURRENT_FOG_COORDINATE, 0x8453) \
	CONST(int, GL_FOG_COORDINATE_ARRAY_TYPE, 0x8454) \
	CONST(int, GL_FOG_COORDINATE_ARRAY_STRIDE, 0x8455) \
	CONST(int, GL_FOG_COORDINATE_ARRAY_POINTER, 0x8456) \
	CONST(int, GL_FOG_COORDINATE_ARRAY, 0x8457) \
	CONST(int, GL_COLOR_SUM, 0x8458) \
	CONST(int, GL_CURRENT_SECONDARY_COLOR, 0x8459) \
	CONST(int, GL_SECONDARY_COLOR_ARRAY_SIZE, 0x845A) \
	CONST(int, GL_SECONDARY_COLOR_ARRAY_TYPE, 0x845B) \
	CONST(int, GL_SECONDARY_COLOR_ARRAY_STRIDE, 0x845C) \
	CONST(int, GL_SECONDARY_COLOR_ARRAY_POINTER, 0x845D) \
	CONST(int, GL_SECONDARY_COLOR_ARRAY, 0x845E) \
	CONST(int, GL_TEXTURE_FILTER_CONTROL, 0x8500) \
	CONST(int, GL_DEPTH_TEXTURE_MODE, 0x884B) \
	CONST(int, GL_COMPARE_R_TO_TEXTURE, 0x884E) \
	FUNC(void , glFogCoordf, GLFOGCOORDF, (GLfloat coord ), (coord)) \
	FUNC(void , glFogCoordfv, GLFOGCOORDFV, (const GLfloat * coord ), (coord)) \
	FUNC(void , glFogCoordd, GLFOGCOORDD, (GLdouble coord ), (coord)) \
	FUNC(void , glFogCoorddv, GLFOGCOORDDV, (const GLdouble * coord ), (coord)) \
	FUNC(void , glFogCoordPointer, GLFOGCOORDPOINTER, (GLenum type , GLsizei stride , const GLvoid * pointer ), (type, stride, pointer)) \
	FUNC(void , glSecondaryColor3b, GLSECONDARYCOLOR3B, (GLbyte red , GLbyte green , GLbyte blue ), (red, green, blue)) \
	FUNC(void , glSecondaryColor3bv, GLSECONDARYCOLOR3BV, (const GLbyte * v ), (v)) \
	FUNC(void , glSecondaryColor3d, GLSECONDARYCOLOR3D, (GLdouble red , GLdouble green , GLdouble blue ), (red, green, blue)) \
	FUNC(void , glSecondaryColor3dv, GLSECONDARYCOLOR3DV, (const GLdouble * v ), (v)) \
	FUNC(void , glSecondaryColor3f, GLSECONDARYCOLOR3F, (GLfloat red , GLfloat green , GLfloat blue ), (red, green, blue)) \
	FUNC(void , glSecondaryColor3fv, GLSECONDARYCOLOR3FV, (const GLfloat * v ), (v)) \
	FUNC(void , glSecondaryColor3i, GLSECONDARYCOLOR3I, (GLint red , GLint green , GLint blue ), (red, green, blue)) \
	FUNC(void , glSecondaryColor3iv, GLSECONDARYCOLOR3IV, (const GLint * v ), (v)) \
	FUNC(void , glSecondaryColor3s, GLSECONDARYCOLOR3S, (GLshort red , GLshort green , GLshort blue ), (red, green, blue)) \
	FUNC(void , glSecondaryColor3sv, GLSECONDARYCOLOR3SV, (const GLshort * v ), (v)) \
	FUNC(void , glSecondaryColor3ub, GLSECONDARYCOLOR3UB, (GLubyte red , GLubyte green , GLubyte blue ), (red, green, blue)) \
	FUNC(void , glSecondaryColor3ubv, GLSECONDARYCOLOR3UBV, (const GLubyte * v ), (v)) \
	FUNC(void , glSecondaryColor3ui, GLSECONDARYCOLOR3UI, (GLuint red , GLuint green , GLuint blue ), (red, green, blue)) \
	FUNC(void , glSecondaryColor3uiv, GLSECONDARYCOLOR3UIV, (const GLuint * v ), (v)) \
	FUNC(void , glSecondaryColor3us, GLSECONDARYCOLOR3US, (GLushort red , GLushort green , GLushort blue ), (red, green, blue)) \
	FUNC(void , glSecondaryColor3usv, GLSECONDARYCOLOR3USV, (const GLushort * v ), (v)) \
	FUNC(void , glSecondaryColorPointer, GLSECONDARYCOLORPOINTER, (GLint size , GLenum type , GLsizei stride , const GLvoid * pointer ), (size, type, stride, pointer)) \
	FUNC(void , glWindowPos2d, GLWINDOWPOS2D, (GLdouble x , GLdouble y ), (x, y)) \
	FUNC(void , glWindowPos2dv, GLWINDOWPOS2DV, (const GLdouble * v ), (v)) \
	FUNC(void , glWindowPos2f, GLWINDOWPOS2F, (GLfloat x , GLfloat y ), (x, y)) \
	FUNC(void , glWindowPos2fv, GLWINDOWPOS2FV, (const GLfloat * v ), (v)) \
	FUNC(void , glWindowPos2i, GLWINDOWPOS2I, (GLint x , GLint y ), (x, y)) \
	FUNC(void , glWindowPos2iv, GLWINDOWPOS2IV, (const GLint * v ), (v)) \
	FUNC(void , glWindowPos2s, GLWINDOWPOS2S, (GLshort x , GLshort y ), (x, y)) \
	FUNC(void , glWindowPos2sv, GLWINDOWPOS2SV, (const GLshort * v ), (v)) \
	FUNC(void , glWindowPos3d, GLWINDOWPOS3D, (GLdouble x , GLdouble y , GLdouble z ), (x, y, z)) \
	FUNC(void , glWindowPos3dv, GLWINDOWPOS3DV, (const GLdouble * v ), (v)) \
	FUNC(void , glWindowPos3f, GLWINDOWPOS3F, (GLfloat x , GLfloat y , GLfloat z ), (x, y, z)) \
	FUNC(void , glWindowPos3fv, GLWINDOWPOS3FV, (const GLfloat * v ), (v)) \
	FUNC(void , glWindowPos3i, GLWINDOWPOS3I, (GLint x , GLint y , GLint z ), (x, y, z)) \
	FUNC(void , glWindowPos3iv, GLWINDOWPOS3IV, (const GLint * v ), (v)) \
	FUNC(void , glWindowPos3s, GLWINDOWPOS3S, (GLshort x , GLshort y , GLshort z ), (x, y, z)) \
	FUNC(void , glWindowPos3sv, GLWINDOWPOS3SV, (const GLshort * v ), (v)) \
	END()
#else
#define EXTENSION_GL_VERSION_1_4_DEPRECATED(NAME, FUNC, CONST, END)
#endif

#ifndef GL_VERSION_1_5
#define GL_VERSION_1_5 1
#define EXTENSION_GL_VERSION_1_5(NAME, FUNC, CONST, END) \
	NAME(GL_VERSION_1_5) \
	CONST(int, GL_BUFFER_SIZE, 0x8764) \
	CONST(int, GL_BUFFER_USAGE, 0x8765) \
	CONST(int, GL_QUERY_COUNTER_BITS, 0x8864) \
	CONST(int, GL_CURRENT_QUERY, 0x8865) \
	CONST(int, GL_QUERY_RESULT, 0x8866) \
	CONST(int, GL_QUERY_RESULT_AVAILABLE, 0x8867) \
	CONST(int, GL_ARRAY_BUFFER, 0x8892) \
	CONST(int, GL_ELEMENT_ARRAY_BUFFER, 0x8893) \
	CONST(int, GL_ARRAY_BUFFER_BINDING, 0x8894) \
	CONST(int, GL_ELEMENT_ARRAY_BUFFER_BINDING, 0x8895) \
	CONST(int, GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING, 0x889F) \
	CONST(int, GL_READ_ONLY, 0x88B8) \
	CONST(int, GL_WRITE_ONLY, 0x88B9) \
	CONST(int, GL_READ_WRITE, 0x88BA) \
	CONST(int, GL_BUFFER_ACCESS, 0x88BB) \
	CONST(int, GL_BUFFER_MAPPED, 0x88BC) \
	CONST(int, GL_BUFFER_MAP_POINTER, 0x88BD) \
	CONST(int, GL_STREAM_DRAW, 0x88E0) \
	CONST(int, GL_STREAM_READ, 0x88E1) \
	CONST(int, GL_STREAM_COPY, 0x88E2) \
	CONST(int, GL_STATIC_DRAW, 0x88E4) \
	CONST(int, GL_STATIC_READ, 0x88E5) \
	CONST(int, GL_STATIC_COPY, 0x88E6) \
	CONST(int, GL_DYNAMIC_DRAW, 0x88E8) \
	CONST(int, GL_DYNAMIC_READ, 0x88E9) \
	CONST(int, GL_DYNAMIC_COPY, 0x88EA) \
	CONST(int, GL_SAMPLES_PASSED, 0x8914) \
	FUNC(void , glGenQueries, GLGENQUERIES, (GLsizei n , GLuint * ids ), (n, ids)) \
	FUNC(void , glDeleteQueries, GLDELETEQUERIES, (GLsizei n , const GLuint * ids ), (n, ids)) \
	FUNC(GLboolean , glIsQuery, GLISQUERY, (GLuint id ), (id)) \
	FUNC(void , glBeginQuery, GLBEGINQUERY, (GLenum target , GLuint id ), (target, id)) \
	FUNC(void , glEndQuery, GLENDQUERY, (GLenum target ), (target)) \
	FUNC(void , glGetQueryiv, GLGETQUERYIV, (GLenum target , GLenum pname , GLint * params ), (target, pname, params)) \
	FUNC(void , glGetQueryObjectiv, GLGETQUERYOBJECTIV, (GLuint id , GLenum pname , GLint * params ), (id, pname, params)) \
	FUNC(void , glGetQueryObjectuiv, GLGETQUERYOBJECTUIV, (GLuint id , GLenum pname , GLuint * params ), (id, pname, params)) \
	FUNC(void , glBindBuffer, GLBINDBUFFER, (GLenum target , GLuint buffer ), (target, buffer)) \
	FUNC(void , glDeleteBuffers, GLDELETEBUFFERS, (GLsizei n , const GLuint * buffers ), (n, buffers)) \
	FUNC(void , glGenBuffers, GLGENBUFFERS, (GLsizei n , GLuint * buffers ), (n, buffers)) \
	FUNC(GLboolean , glIsBuffer, GLISBUFFER, (GLuint buffer ), (buffer)) \
	FUNC(void , glBufferData, GLBUFFERDATA, (GLenum target , GLsizeiptr size , const GLvoid * data , GLenum usage ), (target, size, data, usage)) \
	FUNC(void , glBufferSubData, GLBUFFERSUBDATA, (GLenum target , GLintptr offset , GLsizeiptr size , const GLvoid * data ), (target, offset, size, data)) \
	FUNC(void , glGetBufferSubData, GLGETBUFFERSUBDATA, (GLenum target , GLintptr offset , GLsizeiptr size , GLvoid * data ), (target, offset, size, data)) \
	FUNC(GLvoid * , glMapBuffer, GLMAPBUFFER, (GLenum target , GLenum access ), (target, access)) \
	FUNC(GLboolean , glUnmapBuffer, GLUNMAPBUFFER, (GLenum target ), (target)) \
	FUNC(void , glGetBufferParameteriv, GLGETBUFFERPARAMETERIV, (GLenum target , GLenum pname , GLint * params ), (target, pname, params)) \
	FUNC(void , glGetBufferPointerv, GLGETBUFFERPOINTERV, (GLenum target , GLenum pname , GLvoid * * params ), (target, pname, params)) \
	END()
#else
#define EXTENSION_GL_VERSION_1_5(NAME, FUNC, CONST, END)
#endif

#ifndef GL_VERSION_1_5_DEPRECATED
#define GL_VERSION_1_5_DEPRECATED 1
#define EXTENSION_GL_VERSION_1_5_DEPRECATED(NAME, FUNC, CONST, END) \
	NAME(GL_VERSION_1_5_DEPRECATED) \
	CONST(int, GL_VERTEX_ARRAY_BUFFER_BINDING, 0x8896) \
	CONST(int, GL_NORMAL_ARRAY_BUFFER_BINDING, 0x8897) \
	CONST(int, GL_COLOR_ARRAY_BUFFER_BINDING, 0x8898) \
	CONST(int, GL_INDEX_ARRAY_BUFFER_BINDING, 0x8899) \
	CONST(int, GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING, 0x889A) \
	CONST(int, GL_EDGE_FLAG_ARRAY_BUFFER_BINDING, 0x889B) \
	CONST(int, GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING, 0x889C) \
	CONST(int, GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING, 0x889D) \
	CONST(int, GL_WEIGHT_ARRAY_BUFFER_BINDING, 0x889E) \
	CONST(int, GL_FOG_COORD_SRC, 0x8450) \
	CONST(int, GL_FOG_COORD, 0x8451) \
	CONST(int, GL_CURRENT_FOG_COORD, 0x8453) \
	CONST(int, GL_FOG_COORD_ARRAY_TYPE, 0x8454) \
	CONST(int, GL_FOG_COORD_ARRAY_STRIDE, 0x8455) \
	CONST(int, GL_FOG_COORD_ARRAY_POINTER, 0x8456) \
	CONST(int, GL_FOG_COORD_ARRAY, 0x8457) \
	CONST(int, GL_FOG_COORD_ARRAY_BUFFER_BINDING, 0x889D) \
	CONST(int, GL_SRC0_RGB, 0x8580) \
	CONST(int, GL_SRC1_RGB, 0x8581) \
	CONST(int, GL_SRC2_RGB, 0x8582) \
	CONST(int, GL_SRC0_ALPHA, 0x8588) \
	CONST(int, GL_SRC1_ALPHA, 0x8589) \
	CONST(int, GL_SRC2_ALPHA, 0x858A) \
	END()
#else
#define EXTENSION_GL_VERSION_1_5_DEPRECATED(NAME, FUNC, CONST, END)
#endif

#ifndef GL_VERSION_2_0
#define GL_VERSION_2_0 1
#define EXTENSION_GL_VERSION_2_0(NAME, FUNC, CONST, END) \
	NAME(GL_VERSION_2_0) \
	CONST(int, GL_BLEND_EQUATION_RGB, 0x8009) \
	CONST(int, GL_VERTEX_ATTRIB_ARRAY_ENABLED, 0x8622) \
	CONST(int, GL_VERTEX_ATTRIB_ARRAY_SIZE, 0x8623) \
	CONST(int, GL_VERTEX_ATTRIB_ARRAY_STRIDE, 0x8624) \
	CONST(int, GL_VERTEX_ATTRIB_ARRAY_TYPE, 0x8625) \
	CONST(int, GL_CURRENT_VERTEX_ATTRIB, 0x8626) \
	CONST(int, GL_VERTEX_PROGRAM_POINT_SIZE, 0x8642) \
	CONST(int, GL_VERTEX_ATTRIB_ARRAY_POINTER, 0x8645) \
	CONST(int, GL_STENCIL_BACK_FUNC, 0x8800) \
	CONST(int, GL_STENCIL_BACK_FAIL, 0x8801) \
	CONST(int, GL_STENCIL_BACK_PASS_DEPTH_FAIL, 0x8802) \
	CONST(int, GL_STENCIL_BACK_PASS_DEPTH_PASS, 0x8803) \
	CONST(int, GL_MAX_DRAW_BUFFERS, 0x8824) \
	CONST(int, GL_DRAW_BUFFER0, 0x8825) \
	CONST(int, GL_DRAW_BUFFER1, 0x8826) \
	CONST(int, GL_DRAW_BUFFER2, 0x8827) \
	CONST(int, GL_DRAW_BUFFER3, 0x8828) \
	CONST(int, GL_DRAW_BUFFER4, 0x8829) \
	CONST(int, GL_DRAW_BUFFER5, 0x882A) \
	CONST(int, GL_DRAW_BUFFER6, 0x882B) \
	CONST(int, GL_DRAW_BUFFER7, 0x882C) \
	CONST(int, GL_DRAW_BUFFER8, 0x882D) \
	CONST(int, GL_DRAW_BUFFER9, 0x882E) \
	CONST(int, GL_DRAW_BUFFER10, 0x882F) \
	CONST(int, GL_DRAW_BUFFER11, 0x8830) \
	CONST(int, GL_DRAW_BUFFER12, 0x8831) \
	CONST(int, GL_DRAW_BUFFER13, 0x8832) \
	CONST(int, GL_DRAW_BUFFER14, 0x8833) \
	CONST(int, GL_DRAW_BUFFER15, 0x8834) \
	CONST(int, GL_BLEND_EQUATION_ALPHA, 0x883D) \
	CONST(int, GL_MAX_VERTEX_ATTRIBS, 0x8869) \
	CONST(int, GL_VERTEX_ATTRIB_ARRAY_NORMALIZED, 0x886A) \
	CONST(int, GL_MAX_TEXTURE_IMAGE_UNITS, 0x8872) \
	CONST(int, GL_FRAGMENT_SHADER, 0x8B30) \
	CONST(int, GL_VERTEX_SHADER, 0x8B31) \
	CONST(int, GL_MAX_FRAGMENT_UNIFORM_COMPONENTS, 0x8B49) \
	CONST(int, GL_MAX_VERTEX_UNIFORM_COMPONENTS, 0x8B4A) \
	CONST(int, GL_MAX_VARYING_FLOATS, 0x8B4B) \
	CONST(int, GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS, 0x8B4C) \
	CONST(int, GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, 0x8B4D) \
	CONST(int, GL_SHADER_TYPE, 0x8B4F) \
	CONST(int, GL_FLOAT_VEC2, 0x8B50) \
	CONST(int, GL_FLOAT_VEC3, 0x8B51) \
	CONST(int, GL_FLOAT_VEC4, 0x8B52) \
	CONST(int, GL_INT_VEC2, 0x8B53) \
	CONST(int, GL_INT_VEC3, 0x8B54) \
	CONST(int, GL_INT_VEC4, 0x8B55) \
	CONST(int, GL_BOOL, 0x8B56) \
	CONST(int, GL_BOOL_VEC2, 0x8B57) \
	CONST(int, GL_BOOL_VEC3, 0x8B58) \
	CONST(int, GL_BOOL_VEC4, 0x8B59) \
	CONST(int, GL_FLOAT_MAT2, 0x8B5A) \
	CONST(int, GL_FLOAT_MAT3, 0x8B5B) \
	CONST(int, GL_FLOAT_MAT4, 0x8B5C) \
	CONST(int, GL_SAMPLER_1D, 0x8B5D) \
	CONST(int, GL_SAMPLER_2D, 0x8B5E) \
	CONST(int, GL_SAMPLER_3D, 0x8B5F) \
	CONST(int, GL_SAMPLER_CUBE, 0x8B60) \
	CONST(int, GL_SAMPLER_1D_SHADOW, 0x8B61) \
	CONST(int, GL_SAMPLER_2D_SHADOW, 0x8B62) \
	CONST(int, GL_DELETE_STATUS, 0x8B80) \
	CONST(int, GL_COMPILE_STATUS, 0x8B81) \
	CONST(int, GL_LINK_STATUS, 0x8B82) \
	CONST(int, GL_VALIDATE_STATUS, 0x8B83) \
	CONST(int, GL_INFO_LOG_LENGTH, 0x8B84) \
	CONST(int, GL_ATTACHED_SHADERS, 0x8B85) \
	CONST(int, GL_ACTIVE_UNIFORMS, 0x8B86) \
	CONST(int, GL_ACTIVE_UNIFORM_MAX_LENGTH, 0x8B87) \
	CONST(int, GL_SHADER_SOURCE_LENGTH, 0x8B88) \
	CONST(int, GL_ACTIVE_ATTRIBUTES, 0x8B89) \
	CONST(int, GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, 0x8B8A) \
	CONST(int, GL_FRAGMENT_SHADER_DERIVATIVE_HINT, 0x8B8B) \
	CONST(int, GL_SHADING_LANGUAGE_VERSION, 0x8B8C) \
	CONST(int, GL_CURRENT_PROGRAM, 0x8B8D) \
	CONST(int, GL_POINT_SPRITE_COORD_ORIGIN, 0x8CA0) \
	CONST(int, GL_LOWER_LEFT, 0x8CA1) \
	CONST(int, GL_UPPER_LEFT, 0x8CA2) \
	CONST(int, GL_STENCIL_BACK_REF, 0x8CA3) \
	CONST(int, GL_STENCIL_BACK_VALUE_MASK, 0x8CA4) \
	CONST(int, GL_STENCIL_BACK_WRITEMASK, 0x8CA5) \
	FUNC(void , glBlendEquationSeparate, GLBLENDEQUATIONSEPARATE, (GLenum modeRGB , GLenum modeAlpha ), (modeRGB, modeAlpha)) \
	FUNC(void , glDrawBuffers, GLDRAWBUFFERS, (GLsizei n , const GLenum * bufs ), (n, bufs)) \
	FUNC(void , glStencilOpSeparate, GLSTENCILOPSEPARATE, (GLenum face , GLenum sfail , GLenum dpfail , GLenum dppass ), (face, sfail, dpfail, dppass)) \
	FUNC(void , glStencilFuncSeparate, GLSTENCILFUNCSEPARATE, (GLenum face , GLenum func , GLint ref , GLuint mask ), (face, func, ref, mask)) \
	FUNC(void , glStencilMaskSeparate, GLSTENCILMASKSEPARATE, (GLenum face , GLuint mask ), (face, mask)) \
	FUNC(void , glAttachShader, GLATTACHSHADER, (GLuint program , GLuint shader ), (program, shader)) \
	FUNC(void , glBindAttribLocation, GLBINDATTRIBLOCATION, (GLuint program , GLuint index , const GLchar * name ), (program, index, name)) \
	FUNC(void , glCompileShader, GLCOMPILESHADER, (GLuint shader ), (shader)) \
	FUNC(GLuint , glCreateProgram, GLCREATEPROGRAM, (void ), ()) \
	FUNC(GLuint , glCreateShader, GLCREATESHADER, (GLenum type ), (type)) \
	FUNC(void , glDeleteProgram, GLDELETEPROGRAM, (GLuint program ), (program)) \
	FUNC(void , glDeleteShader, GLDELETESHADER, (GLuint shader ), (shader)) \
	FUNC(void , glDetachShader, GLDETACHSHADER, (GLuint program , GLuint shader ), (program, shader)) \
	FUNC(void , glDisableVertexAttribArray, GLDISABLEVERTEXATTRIBARRAY, (GLuint index ), (index)) \
	FUNC(void , glEnableVertexAttribArray, GLENABLEVERTEXATTRIBARRAY, (GLuint index ), (index)) \
	FUNC(void , glGetActiveAttrib, GLGETACTIVEATTRIB, (GLuint program , GLuint index , GLsizei bufSize , GLsizei * length , GLint * size , GLenum * type , GLchar * name ), (program, index, bufSize, length, size, type, name)) \
	FUNC(void , glGetActiveUniform, GLGETACTIVEUNIFORM, (GLuint program , GLuint index , GLsizei bufSize , GLsizei * length , GLint * size , GLenum * type , GLchar * name ), (program, index, bufSize, length, size, type, name)) \
	FUNC(void , glGetAttachedShaders, GLGETATTACHEDSHADERS, (GLuint program , GLsizei maxCount , GLsizei * count , GLuint * obj ), (program, maxCount, count, obj)) \
	FUNC(GLint , glGetAttribLocation, GLGETATTRIBLOCATION, (GLuint program , const GLchar * name ), (program, name)) \
	FUNC(void , glGetProgramiv, GLGETPROGRAMIV, (GLuint program , GLenum pname , GLint * params ), (program, pname, params)) \
	FUNC(void , glGetProgramInfoLog, GLGETPROGRAMINFOLOG, (GLuint program , GLsizei bufSize , GLsizei * length , GLchar * infoLog ), (program, bufSize, length, infoLog)) \
	FUNC(void , glGetShaderiv, GLGETSHADERIV, (GLuint shader , GLenum pname , GLint * params ), (shader, pname, params)) \
	FUNC(void , glGetShaderInfoLog, GLGETSHADERINFOLOG, (GLuint shader , GLsizei bufSize , GLsizei * length , GLchar * infoLog ), (shader, bufSize, length, infoLog)) \
	FUNC(void , glGetShaderSource, GLGETSHADERSOURCE, (GLuint shader , GLsizei bufSize , GLsizei * length , GLchar * source ), (shader, bufSize, length, source)) \
	FUNC(GLint , glGetUniformLocation, GLGETUNIFORMLOCATION, (GLuint program , const GLchar * name ), (program, name)) \
	FUNC(void , glGetUniformfv, GLGETUNIFORMFV, (GLuint program , GLint location , GLfloat * params ), (program, location, params)) \
	FUNC(void , glGetUniformiv, GLGETUNIFORMIV, (GLuint program , GLint location , GLint * params ), (program, location, params)) \
	FUNC(void , glGetVertexAttribdv, GLGETVERTEXATTRIBDV, (GLuint index , GLenum pname , GLdouble * params ), (index, pname, params)) \
	FUNC(void , glGetVertexAttribfv, GLGETVERTEXATTRIBFV, (GLuint index , GLenum pname , GLfloat * params ), (index, pname, params)) \
	FUNC(void , glGetVertexAttribiv, GLGETVERTEXATTRIBIV, (GLuint index , GLenum pname , GLint * params ), (index, pname, params)) \
	FUNC(void , glGetVertexAttribPointerv, GLGETVERTEXATTRIBPOINTERV, (GLuint index , GLenum pname , GLvoid * * pointer ), (index, pname, pointer)) \
	FUNC(GLboolean , glIsProgram, GLISPROGRAM, (GLuint program ), (program)) \
	FUNC(GLboolean , glIsShader, GLISSHADER, (GLuint shader ), (shader)) \
	FUNC(void , glLinkProgram, GLLINKPROGRAM, (GLuint program ), (program)) \
	FUNC(void , glShaderSource, GLSHADERSOURCE, (GLuint shader , GLsizei count , const GLchar * * string , const GLint * length ), (shader, count, string, length)) \
	FUNC(void , glUseProgram, GLUSEPROGRAM, (GLuint program ), (program)) \
	FUNC(void , glUniform1f, GLUNIFORM1F, (GLint location , GLfloat v0 ), (location, v0)) \
	FUNC(void , glUniform2f, GLUNIFORM2F, (GLint location , GLfloat v0 , GLfloat v1 ), (location, v0, v1)) \
	FUNC(void , glUniform3f, GLUNIFORM3F, (GLint location , GLfloat v0 , GLfloat v1 , GLfloat v2 ), (location, v0, v1, v2)) \
	FUNC(void , glUniform4f, GLUNIFORM4F, (GLint location , GLfloat v0 , GLfloat v1 , GLfloat v2 , GLfloat v3 ), (location, v0, v1, v2, v3)) \
	FUNC(void , glUniform1i, GLUNIFORM1I, (GLint location , GLint v0 ), (location, v0)) \
	FUNC(void , glUniform2i, GLUNIFORM2I, (GLint location , GLint v0 , GLint v1 ), (location, v0, v1)) \
	FUNC(void , glUniform3i, GLUNIFORM3I, (GLint location , GLint v0 , GLint v1 , GLint v2 ), (location, v0, v1, v2)) \
	FUNC(void , glUniform4i, GLUNIFORM4I, (GLint location , GLint v0 , GLint v1 , GLint v2 , GLint v3 ), (location, v0, v1, v2, v3)) \
	FUNC(void , glUniform1fv, GLUNIFORM1FV, (GLint location , GLsizei count , const GLfloat * value ), (location, count, value)) \
	FUNC(void , glUniform2fv, GLUNIFORM2FV, (GLint location , GLsizei count , const GLfloat * value ), (location, count, value)) \
	FUNC(void , glUniform3fv, GLUNIFORM3FV, (GLint location , GLsizei count , const GLfloat * value ), (location, count, value)) \
	FUNC(void , glUniform4fv, GLUNIFORM4FV, (GLint location , GLsizei count , const GLfloat * value ), (location, count, value)) \
	FUNC(void , glUniform1iv, GLUNIFORM1IV, (GLint location , GLsizei count , const GLint * value ), (location, count, value)) \
	FUNC(void , glUniform2iv, GLUNIFORM2IV, (GLint location , GLsizei count , const GLint * value ), (location, count, value)) \
	FUNC(void , glUniform3iv, GLUNIFORM3IV, (GLint location , GLsizei count , const GLint * value ), (location, count, value)) \
	FUNC(void , glUniform4iv, GLUNIFORM4IV, (GLint location , GLsizei count , const GLint * value ), (location, count, value)) \
	FUNC(void , glUniformMatrix2fv, GLUNIFORMMATRIX2FV, (GLint location , GLsizei count , GLboolean transpose , const GLfloat * value ), (location, count, transpose, value)) \
	FUNC(void , glUniformMatrix3fv, GLUNIFORMMATRIX3FV, (GLint location , GLsizei count , GLboolean transpose , const GLfloat * value ), (location, count, transpose, value)) \
	FUNC(void , glUniformMatrix4fv, GLUNIFORMMATRIX4FV, (GLint location , GLsizei count , GLboolean transpose , const GLfloat * value ), (location, count, transpose, value)) \
	FUNC(void , glValidateProgram, GLVALIDATEPROGRAM, (GLuint program ), (program)) \
	FUNC(void , glVertexAttrib1d, GLVERTEXATTRIB1D, (GLuint index , GLdouble x ), (index, x)) \
	FUNC(void , glVertexAttrib1dv, GLVERTEXATTRIB1DV, (GLuint index , const GLdouble * v ), (index, v)) \
	FUNC(void , glVertexAttrib1f, GLVERTEXATTRIB1F, (GLuint index , GLfloat x ), (index, x)) \
	FUNC(void , glVertexAttrib1fv, GLVERTEXATTRIB1FV, (GLuint index , const GLfloat * v ), (index, v)) \
	FUNC(void , glVertexAttrib1s, GLVERTEXATTRIB1S, (GLuint index , GLshort x ), (index, x)) \
	FUNC(void , glVertexAttrib1sv, GLVERTEXATTRIB1SV, (GLuint index , const GLshort * v ), (index, v)) \
	FUNC(void , glVertexAttrib2d, GLVERTEXATTRIB2D, (GLuint index , GLdouble x , GLdouble y ), (index, x, y)) \
	FUNC(void , glVertexAttrib2dv, GLVERTEXATTRIB2DV, (GLuint index , const GLdouble * v ), (index, v)) \
	FUNC(void , glVertexAttrib2f, GLVERTEXATTRIB2F, (GLuint index , GLfloat x , GLfloat y ), (index, x, y)) \
	FUNC(void , glVertexAttrib2fv, GLVERTEXATTRIB2FV, (GLuint index , const GLfloat * v ), (index, v)) \
	FUNC(void , glVertexAttrib2s, GLVERTEXATTRIB2S, (GLuint index , GLshort x , GLshort y ), (index, x, y)) \
	FUNC(void , glVertexAttrib2sv, GLVERTEXATTRIB2SV, (GLuint index , const GLshort * v ), (index, v)) \
	FUNC(void , glVertexAttrib3d, GLVERTEXATTRIB3D, (GLuint index , GLdouble x , GLdouble y , GLdouble z ), (index, x, y, z)) \
	FUNC(void , glVertexAttrib3dv, GLVERTEXATTRIB3DV, (GLuint index , const GLdouble * v ), (index, v)) \
	FUNC(void , glVertexAttrib3f, GLVERTEXATTRIB3F, (GLuint index , GLfloat x , GLfloat y , GLfloat z ), (index, x, y, z)) \
	FUNC(void , glVertexAttrib3fv, GLVERTEXATTRIB3FV, (GLuint index , const GLfloat * v ), (index, v)) \
	FUNC(void , glVertexAttrib3s, GLVERTEXATTRIB3S, (GLuint index , GLshort x , GLshort y , GLshort z ), (index, x, y, z)) \
	FUNC(void , glVertexAttrib3sv, GLVERTEXATTRIB3SV, (GLuint index , const GLshort * v ), (index, v)) \
	FUNC(void , glVertexAttrib4Nbv, GLVERTEXATTRIB4NBV, (GLuint index , const GLbyte * v ), (index, v)) \
	FUNC(void , glVertexAttrib4Niv, GLVERTEXATTRIB4NIV, (GLuint index , const GLint * v ), (index, v)) \
	FUNC(void , glVertexAttrib4Nsv, GLVERTEXATTRIB4NSV, (GLuint index , const GLshort * v ), (index, v)) \
	FUNC(void , glVertexAttrib4Nub, GLVERTEXATTRIB4NUB, (GLuint index , GLubyte x , GLubyte y , GLubyte z , GLubyte w ), (index, x, y, z, w)) \
	FUNC(void , glVertexAttrib4Nubv, GLVERTEXATTRIB4NUBV, (GLuint index , const GLubyte * v ), (index, v)) \
	FUNC(void , glVertexAttrib4Nuiv, GLVERTEXATTRIB4NUIV, (GLuint index , const GLuint * v ), (index, v)) \
	FUNC(void , glVertexAttrib4Nusv, GLVERTEXATTRIB4NUSV, (GLuint index , const GLushort * v ), (index, v)) \
	FUNC(void , glVertexAttrib4bv, GLVERTEXATTRIB4BV, (GLuint index , const GLbyte * v ), (index, v)) \
	FUNC(void , glVertexAttrib4d, GLVERTEXATTRIB4D, (GLuint index , GLdouble x , GLdouble y , GLdouble z , GLdouble w ), (index, x, y, z, w)) \
	FUNC(void , glVertexAttrib4dv, GLVERTEXATTRIB4DV, (GLuint index , const GLdouble * v ), (index, v)) \
	FUNC(void , glVertexAttrib4f, GLVERTEXATTRIB4F, (GLuint index , GLfloat x , GLfloat y , GLfloat z , GLfloat w ), (index, x, y, z, w)) \
	FUNC(void , glVertexAttrib4fv, GLVERTEXATTRIB4FV, (GLuint index , const GLfloat * v ), (index, v)) \
	FUNC(void , glVertexAttrib4iv, GLVERTEXATTRIB4IV, (GLuint index , const GLint * v ), (index, v)) \
	FUNC(void , glVertexAttrib4s, GLVERTEXATTRIB4S, (GLuint index , GLshort x , GLshort y , GLshort z , GLshort w ), (index, x, y, z, w)) \
	FUNC(void , glVertexAttrib4sv, GLVERTEXATTRIB4SV, (GLuint index , const GLshort * v ), (index, v)) \
	FUNC(void , glVertexAttrib4ubv, GLVERTEXATTRIB4UBV, (GLuint index , const GLubyte * v ), (index, v)) \
	FUNC(void , glVertexAttrib4uiv, GLVERTEXATTRIB4UIV, (GLuint index , const GLuint * v ), (index, v)) \
	FUNC(void , glVertexAttrib4usv, GLVERTEXATTRIB4USV, (GLuint index , const GLushort * v ), (index, v)) \
	FUNC(void , glVertexAttribPointer, GLVERTEXATTRIBPOINTER, (GLuint index , GLint size , GLenum type , GLboolean normalized , GLsizei stride , const GLvoid * pointer ), (index, size, type, normalized, stride, pointer)) \
	END()
#else
#define EXTENSION_GL_VERSION_2_0(NAME, FUNC, CONST, END)
#endif

#ifndef GL_VERSION_2_0_DEPRECATED
#define GL_VERSION_2_0_DEPRECATED 1
#define EXTENSION_GL_VERSION_2_0_DEPRECATED(NAME, FUNC, CONST, END) \
	NAME(GL_VERSION_2_0_DEPRECATED) \
	CONST(int, GL_VERTEX_PROGRAM_TWO_SIDE, 0x8643) \
	CONST(int, GL_POINT_SPRITE, 0x8861) \
	CONST(int, GL_COORD_REPLACE, 0x8862) \
	CONST(int, GL_MAX_TEXTURE_COORDS, 0x8871) \
	END()
#else
#define EXTENSION_GL_VERSION_2_0_DEPRECATED(NAME, FUNC, CONST, END)
#endif

#ifndef GL_VERSION_2_1
#define GL_VERSION_2_1 1
#define EXTENSION_GL_VERSION_2_1(NAME, FUNC, CONST, END) \
	NAME(GL_VERSION_2_1) \
	CONST(int, GL_PIXEL_PACK_BUFFER, 0x88EB) \
	CONST(int, GL_PIXEL_UNPACK_BUFFER, 0x88EC) \
	CONST(int, GL_PIXEL_PACK_BUFFER_BINDING, 0x88ED) \
	CONST(int, GL_PIXEL_UNPACK_BUFFER_BINDING, 0x88EF) \
	CONST(int, GL_FLOAT_MAT2x3, 0x8B65) \
	CONST(int, GL_FLOAT_MAT2x4, 0x8B66) \
	CONST(int, GL_FLOAT_MAT3x2, 0x8B67) \
	CONST(int, GL_FLOAT_MAT3x4, 0x8B68) \
	CONST(int, GL_FLOAT_MAT4x2, 0x8B69) \
	CONST(int, GL_FLOAT_MAT4x3, 0x8B6A) \
	CONST(int, GL_SRGB, 0x8C40) \
	CONST(int, GL_SRGB8, 0x8C41) \
	CONST(int, GL_SRGB_ALPHA, 0x8C42) \
	CONST(int, GL_SRGB8_ALPHA8, 0x8C43) \
	CONST(int, GL_COMPRESSED_SRGB, 0x8C48) \
	CONST(int, GL_COMPRESSED_SRGB_ALPHA, 0x8C49) \
	FUNC(void , glUniformMatrix2x3fv, GLUNIFORMMATRIX2X3FV, (GLint location , GLsizei count , GLboolean transpose , const GLfloat * value ), (location, count, transpose, value)) \
	FUNC(void , glUniformMatrix3x2fv, GLUNIFORMMATRIX3X2FV, (GLint location , GLsizei count , GLboolean transpose , const GLfloat * value ), (location, count, transpose, value)) \
	FUNC(void , glUniformMatrix2x4fv, GLUNIFORMMATRIX2X4FV, (GLint location , GLsizei count , GLboolean transpose , const GLfloat * value ), (location, count, transpose, value)) \
	FUNC(void , glUniformMatrix4x2fv, GLUNIFORMMATRIX4X2FV, (GLint location , GLsizei count , GLboolean transpose , const GLfloat * value ), (location, count, transpose, value)) \
	FUNC(void , glUniformMatrix3x4fv, GLUNIFORMMATRIX3X4FV, (GLint location , GLsizei count , GLboolean transpose , const GLfloat * value ), (location, count, transpose, value)) \
	FUNC(void , glUniformMatrix4x3fv, GLUNIFORMMATRIX4X3FV, (GLint location , GLsizei count , GLboolean transpose , const GLfloat * value ), (location, count, transpose, value)) \
	END()
#else
#define EXTENSION_GL_VERSION_2_1(NAME, FUNC, CONST, END)
#endif

#ifndef GL_VERSION_2_1_DEPRECATED
#define GL_VERSION_2_1_DEPRECATED 1
#define EXTENSION_GL_VERSION_2_1_DEPRECATED(NAME, FUNC, CONST, END) \
	NAME(GL_VERSION_2_1_DEPRECATED) \
	CONST(int, GL_CURRENT_RASTER_SECONDARY_COLOR, 0x845F) \
	CONST(int, GL_SLUMINANCE_ALPHA, 0x8C44) \
	CONST(int, GL_SLUMINANCE8_ALPHA8, 0x8C45) \
	CONST(int, GL_SLUMINANCE, 0x8C46) \
	CONST(int, GL_SLUMINANCE8, 0x8C47) \
	CONST(int, GL_COMPRESSED_SLUMINANCE, 0x8C4A) \
	CONST(int, GL_COMPRESSED_SLUMINANCE_ALPHA, 0x8C4B) \
	END()
#else
#define EXTENSION_GL_VERSION_2_1_DEPRECATED(NAME, FUNC, CONST, END)
#endif

#ifndef GL_VERSION_3_0
#define GL_VERSION_3_0 1
#define EXTENSION_GL_VERSION_3_0(NAME, FUNC, CONST, END) \
	NAME(GL_VERSION_3_0) \
	CONST(int, GL_COMPARE_REF_TO_TEXTURE, 0x884E) \
	CONST(int, GL_CLIP_DISTANCE0, 0x3000) \
	CONST(int, GL_CLIP_DISTANCE1, 0x3001) \
	CONST(int, GL_CLIP_DISTANCE2, 0x3002) \
	CONST(int, GL_CLIP_DISTANCE3, 0x3003) \
	CONST(int, GL_CLIP_DISTANCE4, 0x3004) \
	CONST(int, GL_CLIP_DISTANCE5, 0x3005) \
	CONST(int, GL_CLIP_DISTANCE6, 0x3006) \
	CONST(int, GL_CLIP_DISTANCE7, 0x3007) \
	CONST(int, GL_MAX_CLIP_DISTANCES, 0x0D32) \
	CONST(int, GL_MAJOR_VERSION, 0x821B) \
	CONST(int, GL_MINOR_VERSION, 0x821C) \
	CONST(int, GL_NUM_EXTENSIONS, 0x821D) \
	CONST(int, GL_CONTEXT_FLAGS, 0x821E) \
	CONST(int, GL_DEPTH_BUFFER, 0x8223) \
	CONST(int, GL_STENCIL_BUFFER, 0x8224) \
	CONST(int, GL_COMPRESSED_RED, 0x8225) \
	CONST(int, GL_COMPRESSED_RG, 0x8226) \
	CONST(int, GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT, 0x0001) \
	CONST(int, GL_RGBA32F, 0x8814) \
	CONST(int, GL_RGB32F, 0x8815) \
	CONST(int, GL_RGBA16F, 0x881A) \
	CONST(int, GL_RGB16F, 0x881B) \
	CONST(int, GL_VERTEX_ATTRIB_ARRAY_INTEGER, 0x88FD) \
	CONST(int, GL_MAX_ARRAY_TEXTURE_LAYERS, 0x88FF) \
	CONST(int, GL_MIN_PROGRAM_TEXEL_OFFSET, 0x8904) \
	CONST(int, GL_MAX_PROGRAM_TEXEL_OFFSET, 0x8905) \
	CONST(int, GL_CLAMP_READ_COLOR, 0x891C) \
	CONST(int, GL_FIXED_ONLY, 0x891D) \
	CONST(int, GL_MAX_VARYING_COMPONENTS, 0x8B4B) \
	CONST(int, GL_TEXTURE_1D_ARRAY, 0x8C18) \
	CONST(int, GL_PROXY_TEXTURE_1D_ARRAY, 0x8C19) \
	CONST(int, GL_TEXTURE_2D_ARRAY, 0x8C1A) \
	CONST(int, GL_PROXY_TEXTURE_2D_ARRAY, 0x8C1B) \
	CONST(int, GL_TEXTURE_BINDING_1D_ARRAY, 0x8C1C) \
	CONST(int, GL_TEXTURE_BINDING_2D_ARRAY, 0x8C1D) \
	CONST(int, GL_R11F_G11F_B10F, 0x8C3A) \
	CONST(int, GL_UNSIGNED_INT_10F_11F_11F_REV, 0x8C3B) \
	CONST(int, GL_RGB9_E5, 0x8C3D) \
	CONST(int, GL_UNSIGNED_INT_5_9_9_9_REV, 0x8C3E) \
	CONST(int, GL_TEXTURE_SHARED_SIZE, 0x8C3F) \
	CONST(int, GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH, 0x8C76) \
	CONST(int, GL_TRANSFORM_FEEDBACK_BUFFER_MODE, 0x8C7F) \
	CONST(int, GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS, 0x8C80) \
	CONST(int, GL_TRANSFORM_FEEDBACK_VARYINGS, 0x8C83) \
	CONST(int, GL_TRANSFORM_FEEDBACK_BUFFER_START, 0x8C84) \
	CONST(int, GL_TRANSFORM_FEEDBACK_BUFFER_SIZE, 0x8C85) \
	CONST(int, GL_PRIMITIVES_GENERATED, 0x8C87) \
	CONST(int, GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN, 0x8C88) \
	CONST(int, GL_RASTERIZER_DISCARD, 0x8C89) \
	CONST(int, GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS, 0x8C8A) \
	CONST(int, GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS, 0x8C8B) \
	CONST(int, GL_INTERLEAVED_ATTRIBS, 0x8C8C) \
	CONST(int, GL_SEPARATE_ATTRIBS, 0x8C8D) \
	CONST(int, GL_TRANSFORM_FEEDBACK_BUFFER, 0x8C8E) \
	CONST(int, GL_TRANSFORM_FEEDBACK_BUFFER_BINDING, 0x8C8F) \
	CONST(int, GL_RGBA32UI, 0x8D70) \
	CONST(int, GL_RGB32UI, 0x8D71) \
	CONST(int, GL_RGBA16UI, 0x8D76) \
	CONST(int, GL_RGB16UI, 0x8D77) \
	CONST(int, GL_RGBA8UI, 0x8D7C) \
	CONST(int, GL_RGB8UI, 0x8D7D) \
	CONST(int, GL_RGBA32I, 0x8D82) \
	CONST(int, GL_RGB32I, 0x8D83) \
	CONST(int, GL_RGBA16I, 0x8D88) \
	CONST(int, GL_RGB16I, 0x8D89) \
	CONST(int, GL_RGBA8I, 0x8D8E) \
	CONST(int, GL_RGB8I, 0x8D8F) \
	CONST(int, GL_RED_INTEGER, 0x8D94) \
	CONST(int, GL_GREEN_INTEGER, 0x8D95) \
	CONST(int, GL_BLUE_INTEGER, 0x8D96) \
	CONST(int, GL_RGB_INTEGER, 0x8D98) \
	CONST(int, GL_RGBA_INTEGER, 0x8D99) \
	CONST(int, GL_BGR_INTEGER, 0x8D9A) \
	CONST(int, GL_BGRA_INTEGER, 0x8D9B) \
	CONST(int, GL_SAMPLER_1D_ARRAY, 0x8DC0) \
	CONST(int, GL_SAMPLER_2D_ARRAY, 0x8DC1) \
	CONST(int, GL_SAMPLER_1D_ARRAY_SHADOW, 0x8DC3) \
	CONST(int, GL_SAMPLER_2D_ARRAY_SHADOW, 0x8DC4) \
	CONST(int, GL_SAMPLER_CUBE_SHADOW, 0x8DC5) \
	CONST(int, GL_UNSIGNED_INT_VEC2, 0x8DC6) \
	CONST(int, GL_UNSIGNED_INT_VEC3, 0x8DC7) \
	CONST(int, GL_UNSIGNED_INT_VEC4, 0x8DC8) \
	CONST(int, GL_INT_SAMPLER_1D, 0x8DC9) \
	CONST(int, GL_INT_SAMPLER_2D, 0x8DCA) \
	CONST(int, GL_INT_SAMPLER_3D, 0x8DCB) \
	CONST(int, GL_INT_SAMPLER_CUBE, 0x8DCC) \
	CONST(int, GL_INT_SAMPLER_1D_ARRAY, 0x8DCE) \
	CONST(int, GL_INT_SAMPLER_2D_ARRAY, 0x8DCF) \
	CONST(int, GL_UNSIGNED_INT_SAMPLER_1D, 0x8DD1) \
	CONST(int, GL_UNSIGNED_INT_SAMPLER_2D, 0x8DD2) \
	CONST(int, GL_UNSIGNED_INT_SAMPLER_3D, 0x8DD3) \
	CONST(int, GL_UNSIGNED_INT_SAMPLER_CUBE, 0x8DD4) \
	CONST(int, GL_UNSIGNED_INT_SAMPLER_1D_ARRAY, 0x8DD6) \
	CONST(int, GL_UNSIGNED_INT_SAMPLER_2D_ARRAY, 0x8DD7) \
	CONST(int, GL_QUERY_WAIT, 0x8E13) \
	CONST(int, GL_QUERY_NO_WAIT, 0x8E14) \
	CONST(int, GL_QUERY_BY_REGION_WAIT, 0x8E15) \
	CONST(int, GL_QUERY_BY_REGION_NO_WAIT, 0x8E16) \
	CONST(int, GL_BUFFER_ACCESS_FLAGS, 0x911F) \
	CONST(int, GL_BUFFER_MAP_LENGTH, 0x9120) \
	CONST(int, GL_BUFFER_MAP_OFFSET, 0x9121) \
	END()
#else
#define EXTENSION_GL_VERSION_3_0(NAME, FUNC, CONST, END)
#endif

#ifndef GL_VERSION_3_0_DEPRECATED
#define GL_VERSION_3_0_DEPRECATED 1
#define EXTENSION_GL_VERSION_3_0_DEPRECATED(NAME, FUNC, CONST, END) \
	NAME(GL_VERSION_3_0_DEPRECATED) \
	CONST(int, GL_CLAMP_VERTEX_COLOR, 0x891A) \
	CONST(int, GL_CLAMP_FRAGMENT_COLOR, 0x891B) \
	CONST(int, GL_ALPHA_INTEGER, 0x8D97) \
	END()
#else
#define EXTENSION_GL_VERSION_3_0_DEPRECATED(NAME, FUNC, CONST, END)
#endif

#ifndef GL_VERSION_3_1
#define GL_VERSION_3_1 1
#define EXTENSION_GL_VERSION_3_1(NAME, FUNC, CONST, END) \
	NAME(GL_VERSION_3_1) \
	CONST(int, GL_SAMPLER_2D_RECT, 0x8B63) \
	CONST(int, GL_SAMPLER_2D_RECT_SHADOW, 0x8B64) \
	CONST(int, GL_SAMPLER_BUFFER, 0x8DC2) \
	CONST(int, GL_INT_SAMPLER_2D_RECT, 0x8DCD) \
	CONST(int, GL_INT_SAMPLER_BUFFER, 0x8DD0) \
	CONST(int, GL_UNSIGNED_INT_SAMPLER_2D_RECT, 0x8DD5) \
	CONST(int, GL_UNSIGNED_INT_SAMPLER_BUFFER, 0x8DD8) \
	CONST(int, GL_TEXTURE_BUFFER, 0x8C2A) \
	CONST(int, GL_MAX_TEXTURE_BUFFER_SIZE, 0x8C2B) \
	CONST(int, GL_TEXTURE_BINDING_BUFFER, 0x8C2C) \
	CONST(int, GL_TEXTURE_BUFFER_DATA_STORE_BINDING, 0x8C2D) \
	CONST(int, GL_TEXTURE_BUFFER_FORMAT, 0x8C2E) \
	CONST(int, GL_TEXTURE_RECTANGLE, 0x84F5) \
	CONST(int, GL_TEXTURE_BINDING_RECTANGLE, 0x84F6) \
	CONST(int, GL_PROXY_TEXTURE_RECTANGLE, 0x84F7) \
	CONST(int, GL_MAX_RECTANGLE_TEXTURE_SIZE, 0x84F8) \
	CONST(int, GL_RED_SNORM, 0x8F90) \
	CONST(int, GL_RG_SNORM, 0x8F91) \
	CONST(int, GL_RGB_SNORM, 0x8F92) \
	CONST(int, GL_RGBA_SNORM, 0x8F93) \
	CONST(int, GL_R8_SNORM, 0x8F94) \
	CONST(int, GL_RG8_SNORM, 0x8F95) \
	CONST(int, GL_RGB8_SNORM, 0x8F96) \
	CONST(int, GL_RGBA8_SNORM, 0x8F97) \
	CONST(int, GL_R16_SNORM, 0x8F98) \
	CONST(int, GL_RG16_SNORM, 0x8F99) \
	CONST(int, GL_RGB16_SNORM, 0x8F9A) \
	CONST(int, GL_RGBA16_SNORM, 0x8F9B) \
	CONST(int, GL_SIGNED_NORMALIZED, 0x8F9C) \
	CONST(int, GL_PRIMITIVE_RESTART, 0x8F9D) \
	CONST(int, GL_PRIMITIVE_RESTART_INDEX, 0x8F9E) \
	END()
#else
#define EXTENSION_GL_VERSION_3_1(NAME, FUNC, CONST, END)
#endif

#ifndef GL_VERSION_3_2
#define GL_VERSION_3_2 1
#define EXTENSION_GL_VERSION_3_2(NAME, FUNC, CONST, END) \
	NAME(GL_VERSION_3_2) \
	CONST(int, GL_CONTEXT_CORE_PROFILE_BIT, 0x00000001) \
	CONST(int, GL_CONTEXT_COMPATIBILITY_PROFILE_BIT, 0x00000002) \
	CONST(int, GL_LINES_ADJACENCY, 0x000A) \
	CONST(int, GL_LINE_STRIP_ADJACENCY, 0x000B) \
	CONST(int, GL_TRIANGLES_ADJACENCY, 0x000C) \
	CONST(int, GL_TRIANGLE_STRIP_ADJACENCY, 0x000D) \
	CONST(int, GL_PROGRAM_POINT_SIZE, 0x8642) \
	CONST(int, GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS, 0x8C29) \
	CONST(int, GL_FRAMEBUFFER_ATTACHMENT_LAYERED, 0x8DA7) \
	CONST(int, GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS, 0x8DA8) \
	CONST(int, GL_GEOMETRY_SHADER, 0x8DD9) \
	CONST(int, GL_GEOMETRY_VERTICES_OUT, 0x8916) \
	CONST(int, GL_GEOMETRY_INPUT_TYPE, 0x8917) \
	CONST(int, GL_GEOMETRY_OUTPUT_TYPE, 0x8918) \
	CONST(int, GL_MAX_GEOMETRY_UNIFORM_COMPONENTS, 0x8DDF) \
	CONST(int, GL_MAX_GEOMETRY_OUTPUT_VERTICES, 0x8DE0) \
	CONST(int, GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS, 0x8DE1) \
	CONST(int, GL_MAX_VERTEX_OUTPUT_COMPONENTS, 0x9122) \
	CONST(int, GL_MAX_GEOMETRY_INPUT_COMPONENTS, 0x9123) \
	CONST(int, GL_MAX_GEOMETRY_OUTPUT_COMPONENTS, 0x9124) \
	CONST(int, GL_MAX_FRAGMENT_INPUT_COMPONENTS, 0x9125) \
	CONST(int, GL_CONTEXT_PROFILE_MASK, 0x9126) \
	END()
#else
#define EXTENSION_GL_VERSION_3_2(NAME, FUNC, CONST, END)
#endif

#ifndef GL_VERSION_3_3
#define GL_VERSION_3_3 1
#define EXTENSION_GL_VERSION_3_3(NAME, FUNC, CONST, END) \
	NAME(GL_VERSION_3_3) \
	CONST(int, GL_VERTEX_ATTRIB_ARRAY_DIVISOR, 0x88FE) \
	END()
#else
#define EXTENSION_GL_VERSION_3_3(NAME, FUNC, CONST, END)
#endif

#ifndef GL_VERSION_4_0
#define GL_VERSION_4_0 1
#define EXTENSION_GL_VERSION_4_0(NAME, FUNC, CONST, END) \
	NAME(GL_VERSION_4_0) \
	CONST(int, GL_SAMPLE_SHADING, 0x8C36) \
	CONST(int, GL_MIN_SAMPLE_SHADING_VALUE, 0x8C37) \
	CONST(int, GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET, 0x8E5E) \
	CONST(int, GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET, 0x8E5F) \
	CONST(int, GL_TEXTURE_CUBE_MAP_ARRAY, 0x9009) \
	CONST(int, GL_TEXTURE_BINDING_CUBE_MAP_ARRAY, 0x900A) \
	CONST(int, GL_PROXY_TEXTURE_CUBE_MAP_ARRAY, 0x900B) \
	CONST(int, GL_SAMPLER_CUBE_MAP_ARRAY, 0x900C) \
	CONST(int, GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW, 0x900D) \
	CONST(int, GL_INT_SAMPLER_CUBE_MAP_ARRAY, 0x900E) \
	CONST(int, GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY, 0x900F) \
	END()
#else
#define EXTENSION_GL_VERSION_4_0(NAME, FUNC, CONST, END)
#endif

#ifndef GL_VERSION_4_1
#define GL_VERSION_4_1 1
#define EXTENSION_GL_VERSION_4_1(NAME, FUNC, CONST, END) \
	NAME(GL_VERSION_4_1) \
	END()
#else
#define EXTENSION_GL_VERSION_4_1(NAME, FUNC, CONST, END)
#endif

#ifndef GL_WIN_phong_shading
#define GL_WIN_phong_shading 1
#define EXTENSION_GL_WIN_phong_shading(NAME, FUNC, CONST, END) \
	NAME(GL_WIN_phong_shading) \
	CONST(int, GL_PHONG_WIN, 0x80EA) \
	CONST(int, GL_PHONG_HINT_WIN, 0x80EB) \
	END()
#else
#define EXTENSION_GL_WIN_phong_shading(NAME, FUNC, CONST, END)
#endif

#ifndef GL_WIN_specular_fog
#define GL_WIN_specular_fog 1
#define EXTENSION_GL_WIN_specular_fog(NAME, FUNC, CONST, END) \
	NAME(GL_WIN_specular_fog) \
	CONST(int, GL_FOG_SPECULAR_TEXTURE_WIN, 0x80EC) \
	END()
#else
#define EXTENSION_GL_WIN_specular_fog(NAME, FUNC, CONST, END)
#endif

#define ALL_EXTENSIONS(NAME, FUNC, CONST, END) \
	EXTENSION_GL_3DFX_multisample(NAME, FUNC, CONST, END) \
	EXTENSION_GL_3DFX_tbuffer(NAME, FUNC, CONST, END) \
	EXTENSION_GL_3DFX_texture_compression_FXT1(NAME, FUNC, CONST, END) \
	EXTENSION_GL_AMD_conservative_depth(NAME, FUNC, CONST, END) \
	EXTENSION_GL_AMD_debug_output(NAME, FUNC, CONST, END) \
	EXTENSION_GL_AMD_depth_clamp_separate(NAME, FUNC, CONST, END) \
	EXTENSION_GL_AMD_draw_buffers_blend(NAME, FUNC, CONST, END) \
	EXTENSION_GL_AMD_name_gen_delete(NAME, FUNC, CONST, END) \
	EXTENSION_GL_AMD_performance_monitor(NAME, FUNC, CONST, END) \
	EXTENSION_GL_AMD_seamless_cubemap_per_texture(NAME, FUNC, CONST, END) \
	EXTENSION_GL_AMD_shader_stencil_export(NAME, FUNC, CONST, END) \
	EXTENSION_GL_AMD_texture_texture4(NAME, FUNC, CONST, END) \
	EXTENSION_GL_AMD_transform_feedback3_lines_triangles(NAME, FUNC, CONST, END) \
	EXTENSION_GL_AMD_vertex_shader_tesselator(NAME, FUNC, CONST, END) \
	EXTENSION_GL_APPLE_aux_depth_stencil(NAME, FUNC, CONST, END) \
	EXTENSION_GL_APPLE_client_storage(NAME, FUNC, CONST, END) \
	EXTENSION_GL_APPLE_element_array(NAME, FUNC, CONST, END) \
	EXTENSION_GL_APPLE_fence(NAME, FUNC, CONST, END) \
	EXTENSION_GL_APPLE_float_pixels(NAME, FUNC, CONST, END) \
	EXTENSION_GL_APPLE_flush_buffer_range(NAME, FUNC, CONST, END) \
	EXTENSION_GL_APPLE_object_purgeable(NAME, FUNC, CONST, END) \
	EXTENSION_GL_APPLE_rgb_422(NAME, FUNC, CONST, END) \
	EXTENSION_GL_APPLE_row_bytes(NAME, FUNC, CONST, END) \
	EXTENSION_GL_APPLE_specular_vector(NAME, FUNC, CONST, END) \
	EXTENSION_GL_APPLE_texture_range(NAME, FUNC, CONST, END) \
	EXTENSION_GL_APPLE_transform_hint(NAME, FUNC, CONST, END) \
	EXTENSION_GL_APPLE_vertex_array_object(NAME, FUNC, CONST, END) \
	EXTENSION_GL_APPLE_vertex_array_range(NAME, FUNC, CONST, END) \
	EXTENSION_GL_APPLE_vertex_program_evaluators(NAME, FUNC, CONST, END) \
	EXTENSION_GL_APPLE_ycbcr_422(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_ES2_compatibility(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_blend_func_extended(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_cl_event(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_color_buffer_float(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_compatibility(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_copy_buffer(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_debug_output(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_depth_buffer_float(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_depth_clamp(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_depth_texture(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_draw_buffers(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_draw_buffers_blend(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_draw_elements_base_vertex(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_draw_indirect(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_draw_instanced(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_explicit_attrib_location(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_fragment_coord_conventions(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_fragment_program(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_fragment_program_shadow(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_fragment_shader(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_framebuffer_object(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_framebuffer_object_DEPRECATED(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_framebuffer_sRGB(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_geometry_shader4(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_get_program_binary(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_gpu_shader5(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_gpu_shader_fp64(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_half_float_pixel(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_half_float_vertex(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_imaging(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_imaging_DEPRECATED(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_instanced_arrays(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_map_buffer_range(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_matrix_palette(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_multisample(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_multitexture(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_occlusion_query(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_occlusion_query2(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_pixel_buffer_object(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_point_parameters(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_point_sprite(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_provoking_vertex(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_robustness(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_sample_shading(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_sampler_objects(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_seamless_cube_map(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_separate_shader_objects(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_shader_bit_encoding(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_shader_objects(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_shader_precision(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_shader_stencil_export(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_shader_subroutine(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_shader_texture_lod(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_shading_language_100(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_shading_language_include(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_shadow(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_shadow_ambient(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_sync(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_tessellation_shader(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_border_clamp(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_buffer_object(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_buffer_object_rgb32(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_compression(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_compression_bptc(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_compression_rgtc(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_cube_map(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_cube_map_array(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_env_add(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_env_combine(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_env_crossbar(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_env_dot3(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_float(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_gather(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_mirrored_repeat(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_multisample(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_non_power_of_two(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_query_lod(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_rectangle(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_rg(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_rgb10_a2ui(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_swizzle(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_timer_query(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_transform_feedback2(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_transform_feedback3(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_transpose_matrix(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_uniform_buffer_object(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_vertex_array_bgra(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_vertex_array_object(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_vertex_attrib_64bit(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_vertex_blend(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_vertex_buffer_object(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_vertex_program(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_vertex_shader(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_vertex_type_2_10_10_10_rev(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_viewport_array(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_window_pos(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ATI_draw_buffers(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ATI_element_array(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ATI_envmap_bumpmap(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ATI_fragment_shader(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ATI_map_object_buffer(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ATI_meminfo(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ATI_pixel_format_float(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ATI_pn_triangles(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ATI_separate_stencil(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ATI_text_fragment_shader(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ATI_texture_env_combine3(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ATI_texture_float(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ATI_texture_mirror_once(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ATI_vertex_array_object(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ATI_vertex_attrib_array_object(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ATI_vertex_streams(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_422_pixels(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_abgr(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_bgra(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_bindable_uniform(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_blend_color(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_blend_equation_separate(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_blend_func_separate(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_blend_logic_op(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_blend_minmax(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_blend_subtract(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_clip_volume_hint(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_cmyka(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_color_subtable(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_compiled_vertex_array(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_convolution(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_coordinate_frame(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_copy_texture(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_cull_vertex(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_depth_bounds_test(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_direct_state_access(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_draw_buffers2(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_draw_instanced(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_draw_range_elements(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_fog_coord(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_framebuffer_blit(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_framebuffer_multisample(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_framebuffer_object(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_framebuffer_sRGB(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_geometry_shader4(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_gpu_program_parameters(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_gpu_shader4(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_histogram(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_index_array_formats(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_index_func(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_index_material(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_index_texture(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_light_texture(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_misc_attribute(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_multi_draw_arrays(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_multisample(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_packed_depth_stencil(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_packed_float(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_packed_pixels(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_paletted_texture(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_pixel_buffer_object(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_pixel_transform(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_pixel_transform_color_table(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_point_parameters(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_polygon_offset(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_provoking_vertex(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_rescale_normal(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_secondary_color(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_separate_shader_objects(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_separate_specular_color(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_shader_image_load_store(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_shadow_funcs(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_shared_texture_palette(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_stencil_clear_tag(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_stencil_two_side(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_stencil_wrap(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_subtexture(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture3D(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_array(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_buffer_object(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_compression_latc(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_compression_rgtc(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_compression_s3tc(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_cube_map(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_env_add(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_env_combine(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_env_dot3(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_filter_anisotropic(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_integer(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_lod_bias(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_mirror_clamp(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_object(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_perturb_normal(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_sRGB(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_sRGB_decode(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_shared_exponent(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_snorm(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_swizzle(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_timer_query(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_transform_feedback(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_vertex_array(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_vertex_array_bgra(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_vertex_attrib_64bit(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_vertex_shader(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_vertex_weighting(NAME, FUNC, CONST, END) \
	EXTENSION_GL_FfdMaskSGIX(NAME, FUNC, CONST, END) \
	EXTENSION_GL_GREMEDY_frame_terminator(NAME, FUNC, CONST, END) \
	EXTENSION_GL_GREMEDY_string_marker(NAME, FUNC, CONST, END) \
	EXTENSION_GL_HP_convolution_border_modes(NAME, FUNC, CONST, END) \
	EXTENSION_GL_HP_image_transform(NAME, FUNC, CONST, END) \
	EXTENSION_GL_HP_occlusion_test(NAME, FUNC, CONST, END) \
	EXTENSION_GL_HP_texture_lighting(NAME, FUNC, CONST, END) \
	EXTENSION_GL_IBM_cull_vertex(NAME, FUNC, CONST, END) \
	EXTENSION_GL_IBM_multimode_draw_arrays(NAME, FUNC, CONST, END) \
	EXTENSION_GL_IBM_rasterpos_clip(NAME, FUNC, CONST, END) \
	EXTENSION_GL_IBM_texture_mirrored_repeat(NAME, FUNC, CONST, END) \
	EXTENSION_GL_IBM_vertex_array_lists(NAME, FUNC, CONST, END) \
	EXTENSION_GL_INGR_blend_func_separate(NAME, FUNC, CONST, END) \
	EXTENSION_GL_INGR_color_clamp(NAME, FUNC, CONST, END) \
	EXTENSION_GL_INGR_interlace_read(NAME, FUNC, CONST, END) \
	EXTENSION_GL_INGR_palette_buffer(NAME, FUNC, CONST, END) \
	EXTENSION_GL_INTEL_parallel_arrays(NAME, FUNC, CONST, END) \
	EXTENSION_GL_INTEL_texture_scissor(NAME, FUNC, CONST, END) \
	EXTENSION_GL_MESAX_texture_stack(NAME, FUNC, CONST, END) \
	EXTENSION_GL_MESA_pack_invert(NAME, FUNC, CONST, END) \
	EXTENSION_GL_MESA_resize_buffers(NAME, FUNC, CONST, END) \
	EXTENSION_GL_MESA_window_pos(NAME, FUNC, CONST, END) \
	EXTENSION_GL_MESA_ycbcr_texture(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_blend_square(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_conditional_render(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_copy_depth_to_color(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_copy_image(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_depth_buffer_float(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_depth_clamp(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_evaluators(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_explicit_multisample(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_fence(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_float_buffer(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_fog_distance(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_fragment_program(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_fragment_program2(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_fragment_program4(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_fragment_program_option(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_framebuffer_multisample_coverage(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_geometry_program4(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_geometry_shader4(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_gpu_program4(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_gpu_program5(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_gpu_shader5(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_half_float(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_light_max_exponent(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_multisample_coverage(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_multisample_filter_hint(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_occlusion_query(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_packed_depth_stencil(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_parameter_buffer_object(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_parameter_buffer_object2(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_pixel_data_range(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_point_sprite(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_present_video(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_primitive_restart(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_register_combiners(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_register_combiners2(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_shader_buffer_load(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_shader_buffer_store(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_tessellation_program5(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_texgen_emboss(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_texgen_reflection(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_texture_barrier(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_texture_compression_vtc(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_texture_env_combine4(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_texture_expand_normal(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_texture_rectangle(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_texture_shader(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_texture_shader2(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_texture_shader3(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_transform_feedback(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_transform_feedback2(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_vdpau_interop(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_vertex_array_range(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_vertex_array_range2(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_vertex_attrib_integer_64bit(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_vertex_buffer_unified_memory(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_vertex_program(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_vertex_program1_1(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_vertex_program2(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_vertex_program2_option(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_vertex_program3(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_vertex_program4(NAME, FUNC, CONST, END) \
	EXTENSION_GL_NV_video_capture(NAME, FUNC, CONST, END) \
	EXTENSION_GL_OES_read_format(NAME, FUNC, CONST, END) \
	EXTENSION_GL_OML_interlace(NAME, FUNC, CONST, END) \
	EXTENSION_GL_OML_resample(NAME, FUNC, CONST, END) \
	EXTENSION_GL_OML_subsample(NAME, FUNC, CONST, END) \
	EXTENSION_GL_PGI_misc_hints(NAME, FUNC, CONST, END) \
	EXTENSION_GL_PGI_vertex_hints(NAME, FUNC, CONST, END) \
	EXTENSION_GL_REND_screen_coordinates(NAME, FUNC, CONST, END) \
	EXTENSION_GL_S3_s3tc(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SGIS_detail_texture(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SGIS_fog_function(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SGIS_generate_mipmap(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SGIS_multisample(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SGIS_pixel_texture(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SGIS_point_line_texgen(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SGIS_point_parameters(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SGIS_sharpen_texture(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SGIS_texture4D(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SGIS_texture_border_clamp(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SGIS_texture_color_mask(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SGIS_texture_edge_clamp(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SGIS_texture_filter4(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SGIS_texture_lod(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SGIS_texture_select(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SGIX_async(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SGIX_async_histogram(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SGIX_async_pixel(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SGIX_blend_alpha_minmax(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SGIX_calligraphic_fragment(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SGIX_clipmap(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SGIX_convolution_accuracy(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SGIX_depth_texture(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SGIX_flush_raster(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SGIX_fog_offset(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SGIX_fog_scale(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SGIX_fragment_lighting(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SGIX_framezoom(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SGIX_igloo_interface(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SGIX_impact_pixel_texture(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SGIX_instruments(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SGIX_interlace(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SGIX_ir_instrument1(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SGIX_list_priority(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SGIX_pixel_texture(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SGIX_pixel_tiles(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SGIX_polynomial_ffd(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SGIX_reference_plane(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SGIX_resample(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SGIX_scalebias_hint(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SGIX_shadow(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SGIX_shadow_ambient(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SGIX_sprite(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SGIX_subsample(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SGIX_tag_sample_buffer(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SGIX_texture_add_env(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SGIX_texture_coordinate_clamp(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SGIX_texture_lod_bias(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SGIX_texture_multi_buffer(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SGIX_texture_scale_bias(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SGIX_vertex_preclip(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SGIX_ycrcb(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SGIX_ycrcb_subsample(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SGIX_ycrcba(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SGI_color_matrix(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SGI_color_table(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SGI_depth_pass_instrument(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SGI_texture_color_table(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SUNX_constant_data(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SUN_convolution_border_modes(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SUN_global_alpha(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SUN_mesh_array(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SUN_slice_accum(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SUN_triangle_list(NAME, FUNC, CONST, END) \
	EXTENSION_GL_SUN_vertex(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_2(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_2_DEPRECATED(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_3(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_3_DEPRECATED(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_4(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_4_DEPRECATED(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_5(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_5_DEPRECATED(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_2_0(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_2_0_DEPRECATED(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_2_1(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_2_1_DEPRECATED(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_3_0(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_3_0_DEPRECATED(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_3_1(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_3_2(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_3_3(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_4_0(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_4_1(NAME, FUNC, CONST, END) \
	EXTENSION_GL_WIN_phong_shading(NAME, FUNC, CONST, END) \
	EXTENSION_GL_WIN_specular_fog(NAME, FUNC, CONST, END) \

#define ONLY_VERSION MAX_VERSION_EXTENSIONS
#define VERSION_EXTENSIONS(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_2(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_2_DEPRECATED(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_3(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_3_DEPRECATED(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_4(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_4_DEPRECATED(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_5(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_5_DEPRECATED(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_2_0(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_2_0_DEPRECATED(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_2_1(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_2_1_DEPRECATED(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_3_0(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_3_0_DEPRECATED(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_3_1(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_3_2(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_3_3(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_4_0(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_4_1(NAME, FUNC, CONST, END) \

#define VERSION_1_2 VERSION_1_2_EXTENSIONS
#define VERSION_1_2_EXTENSIONS(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_2(NAME, FUNC, CONST, END) \

#define VERSION_1_2_DEPRECATED VERSION_1_2_DEPRECATED_EXTENSIONS
#define VERSION_1_2_DEPRECATED_EXTENSIONS(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_2(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_2_DEPRECATED(NAME, FUNC, CONST, END) \

#define VERSION_1_3 VERSION_1_3_EXTENSIONS
#define VERSION_1_3_EXTENSIONS(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_2(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_3(NAME, FUNC, CONST, END) \

#define VERSION_1_3_DEPRECATED VERSION_1_3_DEPRECATED_EXTENSIONS
#define VERSION_1_3_DEPRECATED_EXTENSIONS(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_2(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_2_DEPRECATED(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_3(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_3_DEPRECATED(NAME, FUNC, CONST, END) \

#define VERSION_1_4 VERSION_1_4_EXTENSIONS
#define VERSION_1_4_EXTENSIONS(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_2(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_3(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_4(NAME, FUNC, CONST, END) \

#define VERSION_1_4_DEPRECATED VERSION_1_4_DEPRECATED_EXTENSIONS
#define VERSION_1_4_DEPRECATED_EXTENSIONS(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_2(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_2_DEPRECATED(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_3(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_3_DEPRECATED(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_4(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_4_DEPRECATED(NAME, FUNC, CONST, END) \

#define VERSION_1_5 VERSION_1_5_EXTENSIONS
#define VERSION_1_5_EXTENSIONS(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_2(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_3(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_4(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_5(NAME, FUNC, CONST, END) \

#define VERSION_1_5_DEPRECATED VERSION_1_5_DEPRECATED_EXTENSIONS
#define VERSION_1_5_DEPRECATED_EXTENSIONS(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_2(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_2_DEPRECATED(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_3(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_3_DEPRECATED(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_4(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_4_DEPRECATED(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_5(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_5_DEPRECATED(NAME, FUNC, CONST, END) \

#define VERSION_2_0 VERSION_2_0_EXTENSIONS
#define VERSION_2_0_EXTENSIONS(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_2(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_3(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_4(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_5(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_2_0(NAME, FUNC, CONST, END) \

#define VERSION_2_0_DEPRECATED VERSION_2_0_DEPRECATED_EXTENSIONS
#define VERSION_2_0_DEPRECATED_EXTENSIONS(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_2(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_2_DEPRECATED(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_3(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_3_DEPRECATED(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_4(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_4_DEPRECATED(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_5(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_5_DEPRECATED(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_2_0(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_2_0_DEPRECATED(NAME, FUNC, CONST, END) \

#define VERSION_2_1 VERSION_2_1_EXTENSIONS
#define VERSION_2_1_EXTENSIONS(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_2(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_3(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_4(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_5(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_2_0(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_2_1(NAME, FUNC, CONST, END) \

#define VERSION_2_1_DEPRECATED VERSION_2_1_DEPRECATED_EXTENSIONS
#define VERSION_2_1_DEPRECATED_EXTENSIONS(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_2(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_2_DEPRECATED(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_3(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_3_DEPRECATED(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_4(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_4_DEPRECATED(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_5(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_5_DEPRECATED(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_2_0(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_2_0_DEPRECATED(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_2_1(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_2_1_DEPRECATED(NAME, FUNC, CONST, END) \

#define VERSION_3_0 VERSION_3_0_EXTENSIONS
#define VERSION_3_0_EXTENSIONS(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_2(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_3(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_4(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_5(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_2_0(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_2_1(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_3_0(NAME, FUNC, CONST, END) \

#define VERSION_3_0_DEPRECATED VERSION_3_0_DEPRECATED_EXTENSIONS
#define VERSION_3_0_DEPRECATED_EXTENSIONS(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_2(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_2_DEPRECATED(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_3(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_3_DEPRECATED(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_4(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_4_DEPRECATED(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_5(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_5_DEPRECATED(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_2_0(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_2_0_DEPRECATED(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_2_1(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_2_1_DEPRECATED(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_3_0(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_3_0_DEPRECATED(NAME, FUNC, CONST, END) \

#define VERSION_3_1 VERSION_3_1_EXTENSIONS
#define VERSION_3_1_EXTENSIONS(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_2(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_3(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_4(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_5(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_2_0(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_2_1(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_3_0(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_3_1(NAME, FUNC, CONST, END) \

#define VERSION_3_2 VERSION_3_2_EXTENSIONS
#define VERSION_3_2_EXTENSIONS(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_2(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_3(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_4(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_5(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_2_0(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_2_1(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_3_0(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_3_1(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_3_2(NAME, FUNC, CONST, END) \

#define VERSION_3_3 VERSION_3_3_EXTENSIONS
#define VERSION_3_3_EXTENSIONS(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_2(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_3(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_4(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_5(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_2_0(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_2_1(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_3_0(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_3_1(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_3_2(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_3_3(NAME, FUNC, CONST, END) \

#define VERSION_4_0 VERSION_4_0_EXTENSIONS
#define VERSION_4_0_EXTENSIONS(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_2(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_3(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_4(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_5(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_2_0(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_2_1(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_3_0(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_3_1(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_3_2(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_3_3(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_4_0(NAME, FUNC, CONST, END) \

#define VERSION_4_1 VERSION_4_1_EXTENSIONS
#define VERSION_4_1_EXTENSIONS(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_2(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_3(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_4(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_1_5(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_2_0(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_2_1(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_3_0(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_3_1(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_3_2(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_3_3(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_4_0(NAME, FUNC, CONST, END) \
	EXTENSION_GL_VERSION_4_1(NAME, FUNC, CONST, END) \

#define ARB_EXTENSIONS(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_ES2_compatibility(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_blend_func_extended(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_cl_event(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_color_buffer_float(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_compatibility(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_copy_buffer(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_debug_output(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_depth_buffer_float(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_depth_clamp(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_depth_texture(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_draw_buffers(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_draw_buffers_blend(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_draw_elements_base_vertex(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_draw_indirect(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_draw_instanced(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_explicit_attrib_location(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_fragment_coord_conventions(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_fragment_program(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_fragment_program_shadow(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_fragment_shader(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_framebuffer_object(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_framebuffer_object_DEPRECATED(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_framebuffer_sRGB(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_geometry_shader4(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_get_program_binary(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_gpu_shader5(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_gpu_shader_fp64(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_half_float_pixel(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_half_float_vertex(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_imaging(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_imaging_DEPRECATED(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_instanced_arrays(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_map_buffer_range(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_matrix_palette(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_multisample(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_multitexture(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_occlusion_query(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_occlusion_query2(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_pixel_buffer_object(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_point_parameters(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_point_sprite(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_provoking_vertex(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_robustness(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_sample_shading(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_sampler_objects(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_seamless_cube_map(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_separate_shader_objects(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_shader_bit_encoding(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_shader_objects(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_shader_precision(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_shader_stencil_export(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_shader_subroutine(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_shader_texture_lod(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_shading_language_100(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_shading_language_include(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_shadow(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_shadow_ambient(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_sync(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_tessellation_shader(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_border_clamp(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_buffer_object(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_buffer_object_rgb32(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_compression(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_compression_bptc(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_compression_rgtc(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_cube_map(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_cube_map_array(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_env_add(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_env_combine(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_env_crossbar(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_env_dot3(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_float(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_gather(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_mirrored_repeat(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_multisample(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_non_power_of_two(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_query_lod(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_rectangle(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_rg(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_rgb10_a2ui(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_swizzle(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_timer_query(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_transform_feedback2(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_transform_feedback3(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_transpose_matrix(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_uniform_buffer_object(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_vertex_array_bgra(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_vertex_array_object(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_vertex_attrib_64bit(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_vertex_blend(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_vertex_buffer_object(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_vertex_program(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_vertex_shader(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_vertex_type_2_10_10_10_rev(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_viewport_array(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_window_pos(NAME, FUNC, CONST, END) \

#define EXT_EXTENSIONS(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_422_pixels(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_abgr(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_bgra(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_bindable_uniform(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_blend_color(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_blend_equation_separate(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_blend_func_separate(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_blend_logic_op(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_blend_minmax(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_blend_subtract(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_clip_volume_hint(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_cmyka(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_color_subtable(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_compiled_vertex_array(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_convolution(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_coordinate_frame(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_copy_texture(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_cull_vertex(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_depth_bounds_test(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_direct_state_access(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_draw_buffers2(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_draw_instanced(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_draw_range_elements(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_fog_coord(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_framebuffer_blit(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_framebuffer_multisample(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_framebuffer_object(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_framebuffer_sRGB(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_geometry_shader4(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_gpu_program_parameters(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_gpu_shader4(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_histogram(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_index_array_formats(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_index_func(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_index_material(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_index_texture(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_light_texture(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_misc_attribute(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_multi_draw_arrays(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_multisample(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_packed_depth_stencil(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_packed_float(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_packed_pixels(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_paletted_texture(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_pixel_buffer_object(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_pixel_transform(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_pixel_transform_color_table(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_point_parameters(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_polygon_offset(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_provoking_vertex(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_rescale_normal(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_secondary_color(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_separate_shader_objects(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_separate_specular_color(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_shader_image_load_store(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_shadow_funcs(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_shared_texture_palette(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_stencil_clear_tag(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_stencil_two_side(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_stencil_wrap(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_subtexture(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture3D(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_array(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_buffer_object(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_compression_latc(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_compression_rgtc(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_compression_s3tc(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_cube_map(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_env_add(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_env_combine(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_env_dot3(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_filter_anisotropic(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_integer(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_lod_bias(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_mirror_clamp(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_object(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_perturb_normal(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_sRGB(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_sRGB_decode(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_shared_exponent(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_snorm(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_swizzle(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_timer_query(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_transform_feedback(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_vertex_array(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_vertex_array_bgra(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_vertex_attrib_64bit(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_vertex_shader(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_vertex_weighting(NAME, FUNC, CONST, END) \

#define IMPORTANT_EXTENSIONS(NAME, FUNC, CONST, END) \
	MAX_VERSION_EXTENSIONS(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_ES2_compatibility(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_blend_func_extended(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_cl_event(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_color_buffer_float(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_compatibility(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_copy_buffer(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_debug_output(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_depth_buffer_float(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_depth_clamp(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_depth_texture(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_draw_buffers(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_draw_buffers_blend(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_draw_elements_base_vertex(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_draw_indirect(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_draw_instanced(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_explicit_attrib_location(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_fragment_coord_conventions(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_fragment_program(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_fragment_program_shadow(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_fragment_shader(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_framebuffer_object(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_framebuffer_object_DEPRECATED(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_framebuffer_sRGB(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_geometry_shader4(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_get_program_binary(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_gpu_shader5(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_gpu_shader_fp64(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_half_float_pixel(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_half_float_vertex(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_imaging(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_imaging_DEPRECATED(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_instanced_arrays(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_map_buffer_range(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_matrix_palette(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_multisample(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_multitexture(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_occlusion_query(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_occlusion_query2(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_pixel_buffer_object(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_point_parameters(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_point_sprite(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_provoking_vertex(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_robustness(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_sample_shading(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_sampler_objects(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_seamless_cube_map(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_separate_shader_objects(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_shader_bit_encoding(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_shader_objects(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_shader_precision(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_shader_stencil_export(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_shader_subroutine(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_shader_texture_lod(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_shading_language_100(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_shading_language_include(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_shadow(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_shadow_ambient(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_sync(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_tessellation_shader(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_border_clamp(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_buffer_object(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_buffer_object_rgb32(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_compression(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_compression_bptc(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_compression_rgtc(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_cube_map(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_cube_map_array(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_env_add(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_env_combine(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_env_crossbar(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_env_dot3(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_float(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_gather(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_mirrored_repeat(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_multisample(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_non_power_of_two(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_query_lod(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_rectangle(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_rg(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_rgb10_a2ui(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_swizzle(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_timer_query(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_transform_feedback2(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_transform_feedback3(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_transpose_matrix(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_uniform_buffer_object(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_vertex_array_bgra(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_vertex_array_object(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_vertex_attrib_64bit(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_vertex_blend(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_vertex_buffer_object(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_vertex_program(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_vertex_shader(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_vertex_type_2_10_10_10_rev(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_viewport_array(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_window_pos(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_422_pixels(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_abgr(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_bgra(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_bindable_uniform(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_blend_color(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_blend_equation_separate(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_blend_func_separate(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_blend_logic_op(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_blend_minmax(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_blend_subtract(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_clip_volume_hint(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_cmyka(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_color_subtable(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_compiled_vertex_array(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_convolution(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_coordinate_frame(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_copy_texture(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_cull_vertex(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_depth_bounds_test(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_direct_state_access(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_draw_buffers2(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_draw_instanced(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_draw_range_elements(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_fog_coord(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_framebuffer_blit(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_framebuffer_multisample(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_framebuffer_object(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_framebuffer_sRGB(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_geometry_shader4(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_gpu_program_parameters(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_gpu_shader4(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_histogram(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_index_array_formats(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_index_func(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_index_material(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_index_texture(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_light_texture(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_misc_attribute(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_multi_draw_arrays(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_multisample(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_packed_depth_stencil(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_packed_float(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_packed_pixels(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_paletted_texture(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_pixel_buffer_object(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_pixel_transform(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_pixel_transform_color_table(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_point_parameters(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_polygon_offset(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_provoking_vertex(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_rescale_normal(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_secondary_color(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_separate_shader_objects(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_separate_specular_color(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_shader_image_load_store(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_shadow_funcs(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_shared_texture_palette(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_stencil_clear_tag(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_stencil_two_side(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_stencil_wrap(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_subtexture(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture3D(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_array(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_buffer_object(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_compression_latc(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_compression_rgtc(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_compression_s3tc(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_cube_map(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_env_add(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_env_combine(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_env_dot3(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_filter_anisotropic(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_integer(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_lod_bias(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_mirror_clamp(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_object(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_perturb_normal(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_sRGB(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_sRGB_decode(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_shared_exponent(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_snorm(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_texture_swizzle(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_timer_query(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_transform_feedback(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_vertex_array(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_vertex_array_bgra(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_vertex_attrib_64bit(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_vertex_shader(NAME, FUNC, CONST, END) \
	EXTENSION_GL_EXT_vertex_weighting(NAME, FUNC, CONST, END) \

#define CRITICAL_EXTENSIONS(NAME, FUNC, CONST, END) \
	MAX_VERSION_EXTENSIONS(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_ES2_compatibility(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_blend_func_extended(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_cl_event(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_color_buffer_float(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_compatibility(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_copy_buffer(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_debug_output(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_depth_buffer_float(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_depth_clamp(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_depth_texture(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_draw_buffers(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_draw_buffers_blend(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_draw_elements_base_vertex(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_draw_indirect(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_draw_instanced(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_explicit_attrib_location(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_fragment_coord_conventions(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_fragment_program(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_fragment_program_shadow(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_fragment_shader(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_framebuffer_object(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_framebuffer_object_DEPRECATED(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_framebuffer_sRGB(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_geometry_shader4(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_get_program_binary(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_gpu_shader5(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_gpu_shader_fp64(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_half_float_pixel(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_half_float_vertex(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_imaging(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_imaging_DEPRECATED(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_instanced_arrays(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_map_buffer_range(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_matrix_palette(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_multisample(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_multitexture(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_occlusion_query(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_occlusion_query2(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_pixel_buffer_object(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_point_parameters(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_point_sprite(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_provoking_vertex(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_robustness(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_sample_shading(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_sampler_objects(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_seamless_cube_map(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_separate_shader_objects(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_shader_bit_encoding(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_shader_objects(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_shader_precision(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_shader_stencil_export(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_shader_subroutine(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_shader_texture_lod(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_shading_language_100(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_shading_language_include(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_shadow(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_shadow_ambient(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_sync(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_tessellation_shader(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_border_clamp(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_buffer_object(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_buffer_object_rgb32(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_compression(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_compression_bptc(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_compression_rgtc(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_cube_map(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_cube_map_array(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_env_add(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_env_combine(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_env_crossbar(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_env_dot3(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_float(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_gather(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_mirrored_repeat(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_multisample(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_non_power_of_two(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_query_lod(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_rectangle(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_rg(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_rgb10_a2ui(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_texture_swizzle(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_timer_query(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_transform_feedback2(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_transform_feedback3(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_transpose_matrix(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_uniform_buffer_object(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_vertex_array_bgra(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_vertex_array_object(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_vertex_attrib_64bit(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_vertex_blend(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_vertex_buffer_object(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_vertex_program(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_vertex_shader(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_vertex_type_2_10_10_10_rev(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_viewport_array(NAME, FUNC, CONST, END) \
	EXTENSION_GL_ARB_window_pos(NAME, FUNC, CONST, END) \
